2016-03-18 25 views
7

Kafamı iş parçacığı etrafında döndürmeye çalışıyorum. Benim kodumda, sadece bir iplik atıyor, sanırım hemen dümdüz ilerleyeceğini düşünüyorum. Kilitleri okuyor ve tahsis ediyordum ama tam olarak anlamadım. 2 iş parçacığının aynı anda bağımsız olarak çalışmasına izin vermek için ne yapmam gerekir?Threading'i anlama

import thread 

def myproc(item): 
    print("Thread fired for " + item) 
    while True: 
     pass 

things = ['thingone', 'thingtwo'] 

for thing in things: 
    try: 
     thread.start_new_thread(myproc(thing)) 

    except: 
     print("Error") 
+0

Kimsenin sorunuza cevap edebilmek için fiili ve beklenen çıkışı göstermek gerekir. –

cevap

5

start_new_thread numaralı imzanızın yanlışlığına sahipsiniz. myproc numaralı telefonu arıyor ve sonucu start_new_thread numaralı bağımsız değişken olarak iletiyorsunuz, bu asla myproc asla bitmeyecek.

Bunun yerine, bu olmalıdır:

thread.start_new_thread(myproc, (thing,)) 

ilk bağımsız (. Örneğin, fonksiyon bir amacı, arama fonksiyonu olan) bir fonksiyonudur ve ikinci bir bağımsız değişken bir demet olup.

bakınız: Eğer programı aslında her iki konuları başlayan edindikten sonra https://docs.python.org/2/library/thread.html#thread.start_new_thread

, muhtemelen ipler, ana iş parçacığı bitirir sona erer, çünkü sonunda bir duraklama eklemek istiyorum.

Ayrıca, thread modülü yerine threading modülünü kullanmayı deneyin, çünkü iş parçacıklarınızın çalışmayı bitirmesini beklemek için uygun bir yol gibi çok daha güzel bir üst düzey arabirim sağlar.

Bkz: https://docs.python.org/2/library/threading.html#module-threading

+1

İş parçacığı, herhangi bir şey yazdırma olanağı bulmadan önce komut da çıkarılıyor –

+0

Sorunun orjinal betiği - iş parçacığı başlangıcına kadar ulaşamadı. Ama evet, orijinal sorunu çözdüğünüzde bu bir endişe. – SpoonMeiser

+0

Parlak - bu mantıklı! – user4893295

2

Uygulamanız, ikinci iş parçacığının bitirebileceği zamandan önce, söyleyebildiğim zamandan çıkılıyor.

#!/usr/bin/python 

import thread 
import time 

# Define a function for the thread 
def print_time(threadName, delay): 
    count = 0 
    while count < 5: 
     time.sleep(delay) 
     count += 1 
     print "%s: %s" % (threadName, time.ctime(time.time())) 

# Create two threads as follows 
try: 
    thread.start_new_thread(print_time, ("Thread-1", 2,)) 
    thread.start_new_thread(print_time, ("Thread-2", 4,)) 
except: 
    print "Error: unable to start thread" 

while 1: # This is a bad solution due to the busy wait loop. More below. 
    pass 

Sen preferrably iplik nesneleri depolamak ve bu sinyal Çıkmadan önce sonundaki thread1.join() ve thread2.join() kullanmalıdır:

Sen uygulama sona önce böyle, bitirmek için parçacığı ikisi için beklemek gerekir ikisi de feshedildi.

+0

Bu da yararlıdır - bir döngü içinde oluşturulduklarında konuları depolamaya nasıl giderim? Bir şekilde "şey" değişkenini örnek ismine almam gerekirdi? – user4893295

+0

@ user4893295 Bir thread nesnesinin nasıl saklanacağı hakkında bilgi için http://www.tutorialspoint.com/python/python_multithreading.htm "Threading Module Kullanarak Konu Oluşturma" başlığına bakın! – Zolomon