我有很长的进程,我想跟踪它当前处于哪种状态。有 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
函数必须在单独的文件中。