配置线程或多处理以运行多个脚本python

时间:2016-02-23 14:51:14

标签: python multithreading multiprocessing

我尝试运行多个脚本,我有一个主脚本,我只需用名称替换并运行。

我正在尝试的线程方法看起来像这样

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)

您会推荐哪些内容以及我需要更改代码才能使其正常工作?

3 个答案:

答案 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(),并且返回值将用作目标值。