来自不同线程的threading.local

时间:2017-02-18 02:05:21

标签: python multithreading python-3.x heroku

我试图制作类似于this的线程cgi网络服务器;但是,我仍然坚持如何在处理程序中为不同的线程设置本地数据。是否可以为处理程序以外的线程设置threading.local数据,例如dict。更具体地说,我希望从subprocess.run开始的cgi文件中获取请求参数,标题等。 this file on githubdo_GET的底部是我现在使用的,但它一次只能为一个客户端服务。我想替换这个部分,因为我想要一次连接多个连接/线程,并且我需要在每个连接/线程中使用不同的数据。

有没有办法从不同的帖子中编辑/设置threading.local数据或者如果有更好的方法来实现我的目标,请告诉我。如果你知道这是绝对不可能的,那就这么说吧。

提前致谢!

1 个答案:

答案 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