Имеет дело, у меня есть определенные записи в моей базе данных. Я звоню Джанго:For loop python information
variables = Variable.objects.order_by('foo').values('foo')
Тогда у меня есть для заявления, который выполняется на каждой переменной найденной
for x in variables:
#doing something....
Моя проблема заключается в том, что «делать что-то» является постоянной задачей ... т.е. он не останавливается. Итак, как мне удастся запустить цикл for во второй переменной?
Я считаю, что это связано с объединением, но разве это не значит, что у меня может быть только 4 процесса одновременно? Как бы мне это сделать, если бы я хотел сказать 50 отдельных процессов для запуска для каждой 50 переменных, и каждый процесс не останавливается до определенного времени или никогда ...
Можно ли это сделать.
Вот мой многопроцессорная код:
if __name__ == '__main__':
x = Variable.objects.order_by('foo').values('foo')
for t in x:
t = t.values()
foo = "".join(t)
info('Starting...')
p = Process(target=myfunction, args=(foo,))
p.start()
p.join()
MyFunction является то, что работает на бесконечном цикле ...
@samuel:
# globals
my_queue = multiprocessing.Manager().Queue() # queue to store our values
stop_event = multiprocessing.Event() # flag which signals processes to stop
my_pool = None
def my_function(foo):
while not stop_event.is_set():
print("starting %s" % foo)
try:
var = my_queue.get_nowait() # getting value from queue
except Queue.Empty:
print "No more items in queue"
# do you logic here
# Since `t` could have unlimited size but do wan't to limit processes
# we'll put all `t` value in queue
x = Company.objects.order_by('ticker').values('ticker')
for t in x:
foo = t.values()
my_queue.put(foo)
MAX_PROCESSES = len(x)
my_pool = multiprocessing.Pool(MAX_PROCESSES)
for i in range(MAX_PROCESSES):
my_pool.apply_async(my_function, args=(foo,))
my_pool.close()
my_pool.join()
[ 'multithreading'] (https://docs.python.org/2/library/threading.html) –
Я полагал, что это был один из их. Спасибо за быстрый ответ –
@MoonCheesez - 'threading' обычно является плохим выбором для 50 одновременных задач, потому что python GIL позволяет только запустить время. «многопроцессорство» было бы лучшим выбором. Так что же такое «многопоточность»? – tdelaney