使用调度程序和多处理模块,我有以下代码:
def computation():
def function1(q):
while True:
daydate = datetime.now()
number = random.randrange(1, 215)
print('Sent to function2: ({}, {})'.format(daydate, number))
q.put((daydate, number))
time.sleep(2)
def function2(q):
while True:
date, number = q.get()
print("Recevied values from function1: ({}, {})".format(date, number))
time.sleep(2)
if __name__ == "__main__":
q = Queue()
a = Process(target=function1, args=(q,))
a.start()
b = Process(target=function2, args=(q,))
b.start()
a.join()
b.join()
schedule.every().monday.at("08:45").do(computation)
schedule.every().tuesday.at("08:45").do(computation)
while True:
schedule.run_pending()
time.sleep(1)
但是,在执行代码时会出现以下错误:
AttributeError: Can't pickle local object 'computation.. function1
以及:
OSError: [WinError 87] The parameter is incorrect
如何解决这个问题?我试图通过在模块的顶层定义一个函数来解决这个问题,如文档(https://docs.python.org/2/library/pickle.html#what-can-be-pickled-and-unpickled)中所述,但是它仍然会给出相同的错误。在
嵌套函数不是在顶层定义的函数,因此会出现错误。您需要将
function1
和function2
的定义重新定位到外部 计算。在如何编写它,您的进程将立即启动,而不是在您计划它们运行的日期。这可能符合你的意图:
进程一旦启动就会永远运行。如果这不是你想要的,你必须考虑实现一些停止条件。在
相关问题 更多 >
编程相关推荐