【发布时间】:2021-12-30 02:31:39
【问题描述】:
我正在尝试使用多处理模块一次运行多个文件.....
import multiprocessing
import schedule
import time
if len(abc)==1:
def live_run1():
def lv1():
exec(open('/path to file/file1.py').read())
def lv_s():
exec(open('/path to file/file2.py').read())
import multiprocessing
if __name__ == '__main__':
p11 = multiprocessing.Process(target=lv1)
p12 = multiprocessing.Process(target=lv_s)
p11.start()
p12.start()
p11.join()
p12.join()
time.sleep(500)
exec(open('/path to file/file3.py').read())
return schedule.CancelJob
schedule.every().day.at("10:30").do(live_run1)
while True:
schedule.run_pending()
time.sleep(1)
我得到的错误:
pickle.PicklingError: Can't pickle <function past_match_sim at 0x7fa26e03b7b8>: attribute lookup past_match_sim on __main__ failed
我无法摆脱这个问题......
感谢任何帮助
【问题讨论】:
-
将函数
lv1和 'lv_s` 移动到全局范围,即不要将它们嵌套在live_run1中。exec是什么?这应该是 Python 内置函数还是您的帖子中未声明的其他内容(您应该发布minimal, reproducible example,这似乎不是,并用您所在的平台标记您的问题运行,例如windows或linux每当您用multiprocessing标记问题时? -
抱歉缺少信息.....我在 linux 中运行此代码(这是我尝试使用 cronjob 安排的文件)。还有 exec() 是一个运行 python 脚本的函数文件(内置)....我尝试了全局范围内的函数,但仍然出现相同的错误...
-
内置函数采用 Python 代码的 string 参数,例如
exec('x = 7 + 3')或使用 @ 创建的 code object 参数987654331@ 功能。你也没有通过。你为什么要使用exec?为什么函数lv1的定义不只是open('/path to file/file1.py').read()?当然,我不知道只是读取文件然后什么都不做结果的目的是什么。但那是另一回事了。
标签: python linux multiprocessing