Kuyruk sınıfına katılabilmek() ancak bir süre sonra çağrı henüz dönmediyse zaman aşımına uğramak istiyorum. Bunu yapmanın en iyi yolu nedir? Meta sınıfını kullanarak alt sınıf sıralaması yapmak mümkün mü?Zaman aşımı argümanı python'un Queue.join() öğesine ekleyin
cevap
Subclassing Queue
muhtemelen en iyi yoldur. Böyle bir şey (denenmemiş) çalışması gerekir:
def join_with_timeout(self, timeout):
self.all_tasks_done.acquire()
try:
endtime = time() + timeout
while self.unfinished_tasks:
remaining = endtime - time()
if remaining <= 0.0:
raise NotFinished
self.all_tasks_done.wait(remaining)
finally:
self.all_tasks_done.release()
Teşekkür sağlamak istiyorum! All_task_done hakkında nereden bilgi aldınız? Ben http://docs.python.org/library/queue.html#module-Queue baktım ama bu memeber herhangi bir söz görmüyorum ... – olamundo
Kuyruk için kaynak kodunu okuyabilirsiniz. Bu 'koymak' ve 'almak' için uygulanan bir 'timeout' parametresi vardır, benzer bir yaklaşım kullanmak için 'katılmak' genişletmek için yeterince kolay oldu. –
Hmm, akıllı çözüm;) – tuergeist
İlk başta, bir Thread Queue kodunu sarar task_done()
ile kuyruk çıkışında tüm çalışma ipler Queue
ile bir zaman aşımı işlevselliğini uygulamak için emin olmalıdır ve kullanma Bu Konudaki bir zaman aşımı eklemek
denenmemiş örnek Thread.join([timeout])
önerim özetlemek
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
def queuefunc():
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.setDaemon(True)
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
t = Thread(target=queuefunc)
t.start()
t.join(100) # timeout applies here
() yöntem Bütün görevler bekliyor konuda yapılması gereken edilir katılmak. Eğer görevleri fiilen bitmiş umrumda yoksa, belirli aralıklarla tamamlanmamış görev sayımını yoklamak:
stop = time() + timeout
while q.unfinished_tasks and time() < stop:
sleep(1)
Bu döngü var olacaktır, ya görevler bittiğinde veya zaman aşımı süresi dolduğunda.
Raymond
- 1. üyelik zaman aşımı ve oturum zaman aşımı
- 2. Çoklu argümanı dbGetQuery() öğesine geçirmek mi?
- 3. CSS sınıfını Html.ActionLink öğesine ekleyin
- 4. Faraday'da "zaman aşımı" ve "açık zaman aşımı" nedir?
- 5. Zaman aşımı ve açık zaman aşımı arasındaki fark nedir?
- 6. HttpWebRequest zaman aşımı
- 7. TestNG'de zaman aşımı testi
- 8. WebSocket Bağlantı zaman aşımı
- 9. WaitGroup.Wait() için zaman aşımı
- 10. BackgroundWorker için zaman aşımı
- 11. NSURLConnection zaman aşımı?
- 12. DatagramSocket zaman aşımı ekleme -) (
- 13. phantomJS webpage zaman aşımı
- 14. Android Ekran Zaman aşımı
- 15. RPC zaman aşımı - Cassandra
- 16. SSH Bağlantı Zaman Aşımı
- 17. zaman aşımı stringwithcontentsofurl
- 18. grpc zaman aşımı
- 19. Bağlantı Zaman Aşımı
- 20. Tomcat istek zaman aşımı
- 21. zaman aşımı süresi havuzu
- 22. Uygulama C# zaman aşımı
- 23. Python psycopg2 zaman aşımı
- 24. PHP oturum zaman aşımı
- 25. Semaphore Zaman Aşımı Süresi
- 26. WCF Zaman aşımı sorunu?
- 27. mod_rewrite proxy zaman aşımı
- 28. RabbitMQ hata zaman aşımı
- 29. setInterval tam zaman aşımı
- 30. Invoke-WebRequest zaman aşımı
O task_done tüm çalışan iş parçacığı ucu() – tuergeist