我目前正在用Python运行一个模拟程序,它需要我运行大量的进程。每个进程都有一个执行特定代码块的循环。在
我面临的问题是,我需要进程运行一段未知的时间(直到我的实验完成)。事先没有办法知道这段时间的价值。在
我正在寻找一种方法来终止进程,或者在实验完成后让它们停止执行。在
目前,我已经使用Python的多处理模块中的管理器创建了一个标志变量。每个子进程都包含一个循环,该循环仅在该标志设置为true时执行。这解决了这个问题,但当toggle标志设置为false时,会生成许多错误,每个进程一个错误。在
Traceback (most recent call last):
File "C:\Python33\lib\multiprocessing\process.py", line 258, in _bootstrap
self.run()
File "C:\Python33\lib\multiprocessing\process.py", line 95, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Michael\PycharmProjects\untitled1\pmonitor.py", line 33, in backgroundTaskLauncher
while flag[0]:
File "<string>", line 2, in __getitem__
File "C:\Python33\lib\multiprocessing\managers.py", line 726, in _callmethod
conn.send((self._id, methodname, args, kwds))
File "C:\Python33\lib\multiprocessing\connection.py", line 207, in send
self._send_bytes(buf.getbuffer())
File "C:\Python33\lib\multiprocessing\connection.py", line 281, in _send_bytes
ov, err = _winapi.WriteFile(self._handle, buf, overlapped=True)
BrokenPipeError: [WinError 232] The pipe is being closed
Process Process-20:
我想知道是否有一个合适的方法来做我想做的事情。我甚至不知道我是否使用了正确的术语。在
主流程代码如下:
^{pr2}$启动流程的代码是:
def backgroundTaskLauncher(taskSize,flag):
while flag[0]:
for i in range(0,CHUNK_AMOUNT):
Thread(target=task, args=(taskSize,)).start()
sleep(MICROCHUNK_GAP)
sleep(INTERCHUNK_GAP*random.random()*2)
基本上,main方法调用许多backgroundTaskLauncher进程,这些进程依次在启用toggle标志时启动多个线程,并在禁用该标志时停止并完成。在
我在寻找正确的方法来获得这种行为。在
我想在程序结束之前,你没有加入你的子进程。因此子进程没有它们的父进程;-)
试试这个:
相关问题 更多 >
编程相关推荐