我尝试运行多个脚本,我有一个主脚本,我只需用名称替换并运行。
我正在尝试的线程方法看起来像这样
from threading import Thread
import sys
sys.path.append('/python/loanrates/master')
names = ['BTS', 'ETH', 'CLAM']#, 'DOGE', 'FCT', 'MAID', 'STR', 'XMR', 'XRP' ]
threads = []
for name in names:
sys.path.append('/python/loanrates/'+name)
import Master
for name in names:
T = Thread(target=Master.main(name))
print T
threads.append(T)
for thread_ in threads:
thread_.start()
for thread_ in threads:
thread_.join()
但这只会启动第一个脚本,即名称'BTS'
中的名字使用多处理似乎更简单,但这次它无法识别Pool
import multiprocessing
import Master
pool = Pool(processes= 2)
names = ['BTS', 'ETH']#, 'CLAM', 'DOGE', 'FCT', 'MAID', 'STR', 'XMR', 'XRP' ]
pool.map(Master.main(), names)
您会推荐哪些内容以及我需要更改代码才能使其正常工作?
答案 0 :(得分:0)
您希望向线程发送函数及其参数,而不是在您的上下文中实际调用它。
所以改变这个:
T = Thread(target=Master.main(name)) # actually calls Master.main(args)
对此:
# send Master.main and arguemnts to the thread
T = Thread(target=Master.main, args=(name,))
同样适用于Pool.map
:
改变这个:
pool.map(Master.main(), names)
对此:
pool.map(Master.main, names)
答案 1 :(得分:0)
尝试从多处理中调用池
import multiprocessing as mp
import Master
pool = mp.Pool(processes= 2)
names = ['BTS', 'ETH']#, 'CLAM', 'DOGE', 'FCT', 'MAID', 'STR', 'XMR', 'XRP' ]
pool.map(Master.main, names)
或仅加载该类
from multiprocessing import Pool
import Master
pool = Pool(processes= 2)
names = ['BTS', 'ETH']#, 'CLAM', 'DOGE', 'FCT', 'MAID', 'STR', 'XMR', 'XRP' ]
pool.map(Master.main, names)
答案 2 :(得分:0)
你已经通过线程构造函数参数Master.main()
给出了args
的参数。
因此创建线程实例应该是:
for name in names:
T = Thread(target=Master.main, args=(name,))
print T
threads.append(T)
如果您使用Thread(target=Master.main(name)
,此时将调用Master.main()
,并且返回值将用作目标值。