Я думаю, что вам нужно Семафор, проверить этот пример кода:
import threading
import datetime
class ThreadClass(threading.Thread):
def run(self):
now = datetime.datetime.now()
pool.acquire()
print "%s says hello, World! at time: %s" % (self.getName(),now)
pool.release()
pool = threading.BoundedSemaphore(value=1)
for i in range(10):
t = ThreadClass()
t.start()
Имеет этот вывод:
Thread-1 says hello, World! at time: 2013-05-20 18:57:47.609000
Thread-2 says hello, World! at time: 2013-05-20 18:57:47.609000
Thread-3 says hello, World! at time: 2013-05-20 18:57:47.609000
Thread-4 says hello, World! at time: 2013-05-20 18:57:47.609000
Thread-5 says hello, World! at time: 2013-05-20 18:57:47.609000
Thread-6 says hello, World! at time: 2013-05-20 18:57:47.609000
Thread-7 says hello, World! at time: 2013-05-20 18:57:47.609000
Thread-8 says hello, World! at time: 2013-05-20 18:57:47.609000
Thread-9 says hello, World! at time: 2013-05-20 18:57:47.609000
Thread-10 says hello, World! at time: 2013-05-20 18:57:47.609000
Где, как:
import threading
import datetime
class ThreadClass(threading.Thread):
def run(self):
now = datetime.datetime.now()
print "%s says hello, World! at time: %s" % (self.getName(),now)
for i in range(10):
t = ThreadClass()
t.start()
Имеет этот вывод:
Thread-1 says hello, World! at time: 2013-05-20 18:58:05.531000Thread-2 says hello, World! at time: 2013-05-20 18:58:05.
531000
Thread-4 says hello, World! at time: 2013-05-20 18:58:05.531000Thread-3 says hello, World! at time: 2013-05-20 18:58:05
.531000
Thread-6 says hello, World! at time: 2013-05-20 18:58:05.531000Thread-5 says hello, World! at time: 2013-05-20 18:58:05
.531000
Thread-8 says hello, World! at time: 2013-05-20 18:58:05.531000Thread-7 says hello, World! at time: 2013-05-20 18:58:05
.531000
Thread-10 says hello, World! at time: 2013-05-20 18:58:05.531000Thread-9 says hello, World! at time: 2013-05-20 18:58:0
5.531000
Так с BoundedSemaphore в Python вы можете убедиться, что, прежде чем кто-нибудь пишет в очередь они должны иметь семафор. Это не гарантирует, что ваши результаты будут добавлены в очередь в правильном порядке.
EDIT:
Если вы собираетесь это сделать, и сохранить порядок ваш будет нужно что-то вроде этого:
import multiprocessing
import datetime
import random
import time
def funfun(number):
time.sleep(random.randint(0,10))
now = datetime.datetime.now()
return "%s says hello, World! at time: %s" % (number,now)
if __name__ == "__main__":
pool = multiprocessing.Pool(10)
for item in pool.imap(funfun,[i for i in range(10)]):
print item
, который печатает:
0 says hello, World! at time: 2013-05-21 00:38:48.546000
1 says hello, World! at time: 2013-05-21 00:38:55.562000
2 says hello, World! at time: 2013-05-21 00:38:47.562000
3 says hello, World! at time: 2013-05-21 00:38:51.578000
4 says hello, World! at time: 2013-05-21 00:38:50.578000
5 says hello, World! at time: 2013-05-21 00:38:48.593000
6 says hello, World! at time: 2013-05-21 00:38:52.593000
7 says hello, World! at time: 2013-05-21 00:38:48.593000
8 says hello, World! at time: 2013-05-21 00:38:50.593000
9 says hello, World! at time: 2013-05-21 00:38:51.609000
Так с этим можно просто присоединитесь к очереди в правильном порядке, и задания будут ждать очереди, чтобы добавить в очередь.
http://en.wikipedia.org/wiki/Semaphore_(programming)? – Noelkd
Noelkd, thanks - Я нашел это: http://docs.python.org/release/2.4.2/lib/semaphore-examples.html это сделает? – cerr
Правильно должно быть еще несколько современных документов. Можете написать быстрый пример, если меня никто не бьет! – Noelkd