2015-02-05 23 views
9

modelini görüntülemiyor Ayrı bir iş parçacığında bir SimpleHTTPServer başlatmak istiyorum, burada başka bir şey (burada, time.sleep(100)).SimpleHTTPServer iş parçacığı olarak başlatıldı:

from SimpleHTTPServer import SimpleHTTPRequestHandler 
from BaseHTTPServer import HTTPServer 

server = HTTPServer(('', 8080), SimpleHTTPRequestHandler) 
print 'OK UNTIL NOW' 
thread = threading.Thread(target = server.serve_forever()) 
print 'STUCK HERE' 
thread.setdaemon = True 
try: 
    thread.start() 
except KeyboardInterrupt: 
    server.shutdown() 
    sys.exit(0) 

print 'OK' 

time.sleep(120) 

Ancak, iplik yani "engelleme" olarak kalır daemon olarak lanse değildir ve yorumlayıcı print 'OK' bulmuyor: İşte benim kod basitleştirilmiş örneğidir. STUCK HERE'a ulaşmaz.

Ancak, iş parçacığının yalnızca threading.Thread(...) numaralı telefonu ararken başlatılacağını ve ana iş parçacığının başlatılmaya başlaması için thread.start yönergesini bulana kadar devam edeceğimi düşünüyorum.

Bu görevi gerçekleştirmenin daha iyi bir yolu var mı?

+1

:

thread.setdaemon = True 

bu olmak thread = threading.Thread (target = sunucu.serve_forever) – vijay

cevap

9

Değişim bu:

thread = threading.Thread(target = server.serve_forever()) 

bu olmak için:

thread = threading.Thread(target = server.serve_forever) 

Ve değiştirmek bu:

thread.daemon = True 
3

Arama olmadan thread = threading.Thread(target = server.serve_forever)'u deneyin.

Sürümünüzdeki sorun, thread'ın oluşturulduğu satırı ayrıştırmak için serve_forever() çağrılmasıdır. Böylece, bir sonraki hatta asla ulaşamazsınız.

Bağımsız değişken türü, iş parçacığı başlangıcında çağrılacak olan callable olmalıdır, bu nedenle , bu işlevi yürütmenin sonucunu iletmeye çalışmak yerine, server.serve_forever adını geçirmeniz gerekir.