skywind3000 / PyStand

:rocket: Python Standalone Deploy Environment !!
MIT License
736 stars 81 forks source link

请问如何支持多进程 #44

Closed AI-M-BOT closed 1 year ago

AI-M-BOT commented 1 year ago

目前会报错:

_pickle.PicklingError: Can't pickle <function x at 0x00000123B688D1B0>: attribute lookup x on __main__ failed

不断的启动新进程->新进程启动->本进程报错退出

例子:

#  vim: set ts=4 sw=4 tw=0 et ft=python :
import os
import sys
import multiprocessing as mp
from time import sleep

def foo(q):
    for _ in range(8):
        sleep(1)
        q.put('hello')

if __name__ == '__main__':
    mp.freeze_support()

    msg = 'Hello from %s'%(os.path.abspath(__file__))
    print(msg)
    print()

    for path in sys.path:
        print('>', path)

    q = mp.Queue()
    p = mp.Process(target=foo, args=(q,))
    p.start()
    for i in range(8):
        sleep(1.1)
        print(q.get())
    p.join()

    a = input('just put something')
skywind3000 commented 1 year ago

调用 runtime 里的 python 可执行启动即可

AI-M-BOT commented 1 year ago

调用 runtime 里的 python 可执行启动即可

请问还有其他办法么 你说的这种方法我没法用才来问的 我把一部分变量和实现放在了pystand.exe里

AI-M-BOT commented 1 year ago

根据https://github.com/skywind3000/PyStand/issues/21, 把函数建立在另一个文件里可行