我试图制作类似于this的线程cgi网络服务器;但是,我仍然坚持如何在处理程序中为不同的线程设置本地数据。是否可以为处理程序以外的线程设置threading.local
数据,例如dict。更具体地说,我希望从subprocess.run
开始的cgi文件中获取请求参数,标题等。 this file on github中do_GET
的底部是我现在使用的,但它一次只能为一个客户端服务。我想替换这个部分,因为我想要一次连接多个连接/线程,并且我需要在每个连接/线程中使用不同的数据。
有没有办法从不同的帖子中编辑/设置threading.local
数据。或者如果有更好的方法来实现我的目标,请告诉我。如果你知道这是绝对不可能的,那就这么说吧。
提前致谢!
答案 0 :(得分: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