У меня есть list
и n
темы. Я хотел бы использовать некоторый механизм IPC для добавления в этот список в определенном порядке, порядок в том, что первый поток записывается сначала в list
, а затем второй поток и т. Д. Единственное, что я придумал, это использовать n блокировок и разблокировать блокировка другого потока после предыдущего завершения своей задачи, но я не считаю, что это правильное решение. Спасибо за вашу помощь.Выполнение потоков python в заказе
-1
A
ответ
0
Вы можете использовать модуль очереди, чтобы сделать это:
from Queue import *
from threading import Thread, Lock
# this function will process the items in the queue, in serial
def processor():
if queue.empty() == True:
print "the Queue is empty!"
sys.exit(1)
try:
job = queue.get()
print "I'm operating on job item: %s"%(job)
queue.task_done()
except:
print "Failed to operate on job"
# set variables
queue = Queue()
threads = 4
''' a list of job items. you would want this to be more advanced,
like reading from a file or database'''
jobs = [ "job1", "job2", "job3" ]
# iterate over jobs and put each into the queue in sequence
for job in jobs:
print "inserting job into the queue: %s" % (job)
queue.put(job)
# start some threads, each one will process one job from the queue
for i in range(threads):
th = Thread(target=processor)
th.setDaemon(True)
th.start()
# wait until all jobs are processed before quitting
queue.join()
Более подробную информацию о модуле очереди, есть пример бога в конце страницы: https://docs.python.org/2/library/queue.html
@EDIT Вы можете использовать a Queue
с FIFO (first-in, first-out) или LIFO (last-in, first-out).
ФИФО пример:
import Queue
q = Queue.Queue()
for i in range(5):
q.put(i)
while not q.empty():
print q.get()
>>> 0
>>> 1
>>> 2
>>> 3
>>> 4
LIFO:
import Queue
q = Queue.LifoQueue()
for i in range(5):
q.put(i)
while not q.empty():
print q.get()
>>> 4
>>> 3
>>> 2
>>> 1
>>> 0
Смежные вопросы
- 1. Выполнение двух потоков одновременно
- 2. Выполнение нескольких потоков последовательно?
- 3. выполнение нескольких потоков одновременно
- 4. Выполнение заказа нескольких потоков
- 5. Выполнение всех ожидающих потоков
- 6. Заказывая выполнение потоков в Java
- 7. Выполнение нескольких потоков в Asynctask
- 8. Выполнение программы потоков в Linux
- 9. Выполнение потоков в параллельном муле
- 10. Выполнение параллельных потоков в C?
- 11. Выполнение нескольких потоков в Java
- 12. Очередное выполнение потоков в C#
- 13. Выполнение нескольких потоков
- 14. Выполнение потоков непредсказуемо
- 15. Выполнение нескольких потоков (вместо потоков/блоков) параллельно
- 16. Параллельное выполнение в python
- 17. TypeError при заказе данных таблицы в Python
- 18. Выполнение монитора (Log) разных потоков
- 19. Выполнение потоков паралелей на Powershell
- 20. параллельное выполнение потоков ненадежное поведение
- 21. Выполнение потоков в очереди в Java
- 22. OpenMP - выполнение потоков на кусках
- 23. Выполнение потоков: UWSGI + многопоточное приложение Python с GeventHTTPClient
- 24. Python - Преобразование потоков в пул потоков?
- 25. потоков в Python
- 26. программирование потоков в python
- 27. Создание потоков в python
- 28. Блокировка потоков в Python
- 29. Записи потоков в python
- 30. демон потоков в Python
В каком смысле вы считаете это решение быть "неправильно"? – NPE
Прошу поэкспериментировать с некоторым фрагментом кода и посмотреть, не является ли оно правильным решением. :) –
Вы должны сначала попробовать ... вы должны только верить в то, что видите ... Я знаю, что сначала он не уверен в решении проблемы и все еще пытается это сделать ... Но он хорошо окупается :) – adil