多处理回调消息



我有很长的进程,我想跟踪它当前处于哪种状态。有 N 个进程同时运行,因此存在多处理问题。

我将队列传递到进程中以报告有关状态的消息,然后每隔几秒钟在线程中读取此Queue(如果不是空(。

我在Windows上使用Spider作为环境,稍后描述的行为在其控制台中。我没有在不同的环境中尝试过。

from multiprocessing import Process,Queue,Lock 
import time
def test(process_msg: Queue):        
try:
process_msg.put('Inside process message')
# process...
return # to have exitstate = 0
except Exception as e:
process_msg.put(e)
callback_msg = Queue()
if __name__ == '__main__':    
p = Process(target = test,
args = (callback_msg,))
p.start()                  
time.sleep(5)
print(p)
while not callback_msg.empty():
msg = callback_msg.get()
if type(msg) != Exception:
tqdm.write(str(msg))
else:
raise msg  

问题是,无论我用代码做什么,它都不会读取Queue里面的内容(也是因为它从不在其中放任何东西(。仅当我切换到虚拟版本时,它的运行类似于仅在 1 个 CPU 上运行线程from multiprocessing.dummy import Process,Queue,Lock

显然test函数必须在单独的文件中。

相关内容

  • 没有找到相关文章

最新更新