functionB
启动functionA
。如果没有结果可以回复,怎么说呢
函数让我们说5秒从functionB
返回“Nothing return”并杀死functionA
进程
def functionA():
value1 = open()
if (value1 != None):
value2 = testcolor()
return value2
else:
value3 = close()
return value3
def functionB():
thread = multiprocessing.Process(name='send_daemon%d', target=functionA)
thread.daemon = True
thread.start()
res = {'status': 'started' ,}
return json.dumps(res)
答案 0 :(得分:0)
在你的情况下,当函数a结束时 - 它只会自行停止,不需要再做任何事情了。
但是如果你需要关闭正在运行的进程。两个最简单的选择是:
使用multiprocessing.Event
启动functionA,并在设置事件时关闭它。
否则你可以使用一个信号(这是可访问的Process().terminate
) - 在你这样做之前你应该读一下:
https://docs.python.org/3.4/librar/multiprocessing.html#multiprocessing.Process
特别是:
警告 如果在关联进程使用管道或时使用此方法 队列然后管道或队列可能会被破坏,并可能 被其他过程变得无法使用。同样,如果过程有 获得锁定或信号量等,然后终止它是负责任的 导致其他进程陷入僵局。
答案 1 :(得分:0)
Queue类有一个超时,我建议使用它:
import multiprocessing
import Queue
def functionA(return_queue):
value1 = open()
if (value1 != None):
value2 = testcolor()
return_queue.put(value2)
else:
value3 = close()
return_queue.put(value3)
def functionB():
return_queue = multiprocessing.Manager().Queue()
proc = multiprocessing.Process(
name='send_daemon%d', target=functionA, args=(return_queue,))
proc.daemon = True
proc.start()
res = {'status': 'started' ,}
try:
# wait for two seconds for the function to return a value
return_value = return_queue.get(timeout=2)
except Queue.Empty:
proc.terminate()
return_value = None
# do something with the return value here
return json.dumps(res)
注意:
multiprocessing.Process()
启动新的进程,而不是线程,因此您应该适当地命名变量。 multiprocessing.Process()
的返回值。此队列实现将允许您获取值。