I have a parent script that runs 10 child scripts.这些脚本除了'name'之外是相同的,每个脚本调用不同的api,保存到依赖于名称的不同文件夹等。
我最初只是将脚本复制了10次但是我现在意识到这很荒谬,好像我进行了一次升级,我必须对所有人进行10次升级。
我对线程很新,我不确定是否允许这样做,但是我可以设置一个调用脚本的for循环或者类似的东西并将'name'放在里面:
即
#parent.py
from threading import Thread
import sys
names = ['BTC', 'BTS', 'ETH', 'CLAM', 'DOGE', 'FCT', 'MAID', 'STR', 'XMR', 'XRP' ]
for name in names:
sys.path.append('/python/loanrates/'+name)
import name
Thread(target=name.main(name)).start()
Thread(target=name.main(name)).join()
答案 0 :(得分:1)
首先,您应该考虑使用multiprocessing
module,因为threading
在Python中具有误导性(在某种意义上,Python目前是单线程的)。
使用这个模块,可以很容易地“推动循环”到模块上。
首先,定义一个池:
# start 4 worker processes
pool = Pool(processes=4)
现在,如果你有一个名字运行的函数f
,你可以使用
pool.map(f, names)
仅当f
应用于names
中的每个项目时,才会返回此选项,使用4个进程的Pool
(在本例中)。即,它就像一个“神奇的”并行循环
"parallel for" name in names:
f(name)
答案 1 :(得分:1)
您可以拥有threads
列表,在循环中启动它们,然后等待它们加入另一个for
循环:
from threading import Thread
import sys
names = ['BTC', 'BTS', 'ETH', 'CLAM', 'DOGE', 'FCT', 'MAID', 'STR', 'XMR', 'XRP' ]
threads = []
for name in names:
sys.path.append('/python/loanrates/'+name)
import name
T = Thread(target=name.main(name))
threads.append(T)
for thread_ in threads:
thread_.start()
for thread_in threads:
thread_.join()