2016-02-23 2 views
1

Я пытаюсь запустить несколько сценариев, у меня есть один мастер-скрипт, который я просто заменяю имя и запускаю.Конфигурирование потоковой или многопроцессорной обработки для запуска нескольких сценариев python

Метод потоковая я пытаюсь выглядит как этот

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 "кажется намного проще, но это не указано Пул

import multiprocessing 
import Master 

pool = Pool(processes= 2) 

names = ['BTS', 'ETH']#, 'CLAM', 'DOGE', 'FCT', 'MAID', 'STR', 'XMR', 'XRP' ] 

pool.map(Master.main(), names) 

Что вы бы посоветовали и что мне нужно, чтобы изменить код, чтобы он работал?

ответ

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) 
0

Try назвать бассейн с многопроцессорной,

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) 
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() будет называться в этой точке и возвращаемое значение будет использоваться в качестве целевого значения.

Смежные вопросы