Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从其他线程执行threading.local_Python_Multithreading_Python 3.x_Heroku - Fatal编程技术网

Python 从其他线程执行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数据。或者如

我正在尝试使线程化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替换的部分,因为我需要不同的数据,具体取决于线程。