是否可以在包含同一池的另一个管道调用的函数上使用pool.apipe?在这两种情况下,我都使用池来实现功能而无需等待它们完成。以下是我所想象的(最小可重现示例):
from pathos.multiprocessing import ProcessingPool as Pool
from sympy import sympify
import pyautogui as auto
import keyboard as k
class Worker:
def __init__(self):
self.pool = Pool(2)
def execute(self, code):
def execute_start(code):
def timeout_risk(val):
return sympify(val, rational=True)
def expr(val):
val = eval(f"f'{val}'")
task = self.pool.apipe(timeout_risk, val)
res = task.get(timeout=0.25)
return res
try:
exec(code)
return 200
except Exception as ex:
return ex.args[0] if ex.args else type(ex)
task = self.pool.apipe(execute_start, code)
return task.get()
def stop(self):
self.pool.terminate()
self.pool.restart()
def check(e):
if k.is_pressed('ctrl+q'):
executor.stop()
elif k.is_pressed('ctrl+1'):
res = executor.execute('while True:\n\tauto.moveTo(expr("10**2"), 0)')
print(res)
if __name__ == '__main__':
k.on_press(check)
executor = Worker()
k.wait()
但这样的尝试,最终一切都归结于daemonic processes are not allowed to have children
。帮我解决这个问题。没有必要使用 pathos,主要的是概念起作用并且在声明类时创建池。如果有人知道更好的方法来实现这一点,我会很高兴看到它。