Python 从其他线程执行threading.local
我正在尝试使线程化cgi Web服务器类似于;但是,我一直在研究如何在处理程序中为不同的线程设置本地数据。是否可以为处理程序以外的线程设置threading.local数据,例如dict。更具体地说,我希望从以subprocess.run启动的cgi文件中获得请求参数、头等。do_GET in的底部是我现在使用的,但一次只能服务一个客户。我想替换此部件,因为我希望同时有多个连接/线程,并且每个连接/线程中需要不同的数据 是否有方法编辑/设置来自不同线程的threading.local数据。或者如果有更好的方法来实现我正在尝试的,请让我知道。如果你知道这绝对是不可能的,那么就说出来Python 从其他线程执行threading.local,python,multithreading,python-3.x,heroku,Python,Multithreading,Python 3.x,Heroku,我正在尝试使线程化cgi Web服务器类似于;但是,我一直在研究如何在处理程序中为不同的线程设置本地数据。是否可以为处理程序以外的线程设置threading.local数据,例如dict。更具体地说,我希望从以subprocess.run启动的cgi文件中获得请求参数、头等。do_GET in的底部是我现在使用的,但一次只能服务一个客户。我想替换此部件,因为我希望同时有多个连接/线程,并且每个连接/线程中需要不同的数据 是否有方法编辑/设置来自不同线程的threading.local数据。或者如
提前谢谢 如果看不到您有什么测试代码,也不知道您迄今为止尝试了什么,我就无法确切地告诉您成功需要什么。也就是说,我可以告诉您,尝试在另一个线程的threading.local对象中编辑信息不是最干净的路径 通常,向其他线程发送调用的最佳方式是通过threading.Event对象。通常,线程侦听事件对象并基于该对象执行操作。在本例中,我可以看到处理程序在GET请求中设置了一个事件 然后,在编写cgi文件的线程中,有一个函数,该函数在设置事件对象时记录所需的数据并取消设置事件对象 因此,在伪代码中:
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"
因此,虽然我无法直接回答您的问题,但我希望这有助于了解线程的通信方式,并帮助您推断您需要什么:
线程信息,我相信你已经读过了,但为了勤奋起见,Hmm。。。我没有对事件做过太多调查。事件是否可以包含诸如字典之类的数据?为了澄清没有线程写入cgi文件,线程正在写入cgi文件读取的.dat文件。这是我试图用threading.local替换的部分,因为我需要不同的数据,具体取决于线程。