2017-02-18 30 views
0

我試圖做一個線程CGI網絡服務器類似this;然而,我堅持如何設置處理器的本地數據爲不同的線程。是否可以爲處理程序以外的線程設置threading.local數據,例如字典。更具體地說,我想要從subprocess.run開始的cgi文件提供請求參數,頭文件等。 do_GET的底部this file on github是我現在使用的,但一次只能爲一個客戶端服務。我想替換這部分,因爲我想一次有多個連接/線程,並且我需要每個連接/線程中的不同數據。threading.local從一個不同的線程

有沒有辦法從另一個線程編輯/設置threading.local數據或者如果有更好的方法來實現我所嘗試的,請讓我知道。如果你知道這是不可能的,那就這麼說吧。

在此先感謝!

回答

1

沒有看到你有什麼測試代碼,並知道你到目前爲止嘗試過什麼,我不能確切地告訴你你需要什麼成功。也就是說,我可以告訴你,嘗試從另一個線程編輯threading.local()對象中的信息並不是最簡潔的方法。

通常,向其他線程發送調用的最佳方式是通過threading.Event()對象。通常,一個線程監聽一個Event()對象,並根據該對象執行一個操作。在這種情況下,我可以看到有一個處理程序在GET請求的情況下設置了一個事件。

然後,在寫入cgi文件的線程中,有一個函數,當設置Event()對象時,記錄您需要的數據並取消設置Event()對象。

所以,在僞代碼:

import threading 

evt = threading.Event() 

def noteTaker(evt): 
    while True: 
    if evt.wait(): 
     modifyDataYouNeed() 
     f.open() 
     f.write() 
     f.close() 
     evt.clear() 

def do_GET(evt): 
    print "so, a query hit your webserver" 
    evt.set() 
    print "and noteTaker was just called" 

所以,雖然我不能直接回答你的問題,我希望這有助於一些關於線程如何溝通,並會幫助你推斷出你所需要的:)

線程的信息(我敢肯定你已經閱讀過,但勤奮的緣故)是here

+0

嗯......還沒有研究活動多。一個事件是否可以包含字典等數據? – jath03

+0

爲了澄清沒有線程_writing_到cgi文件,線程正在寫入由cgi文件讀取的'.dat'文件。 – jath03

+0

這是我試圖用'threading.local'替換的部分,因爲我需要取決於線程的不同數據。 – jath03