2010-07-01 3 views
5

Python'un (python.org) C API'sini denerken, Python'un bir C programında gömülü olduğu zaman Python'un threading paketi aracılığıyla ipliklerin doğru şekilde nasıl üretileceğini merak ettim. İşlevler PyEval_EvalCode ve kin, C işlevi bir Python kod bloğunu değerlendirmeyi bitirdiğinde, "sahip olduğu" iş parçacığını sonlandırır. Döngü bittikten ve kontrol için PyEval_EvalCode (veya) C fonksiyonunun geri döndürülür olarak Kabaca, ... CGömülü Python'da Python konuları: Nasıl?

import threading, time 

class MyThread(threading.Thread): 
    def __init__(self, num): 
     self.num = num 
     threading.Thread.__init__(self) 
    def run(self): 
     print "magic num = %d" % self.num 

for x in xrange(1000): 
    MyThread(x).start() 

aşağıdaki Python çalışan ... tamamen ortadan kalkar. Bunu gözlemleyebiliriz, kesilmiş çıktı üretir.

aşağıdaki taktik kullandıktan sonra bu davranışı hipotezi: Olası bir şüpheli

for x in xrange(100): 
    MyThread(x).start() 

# Don't leave just yet; let threads run for a bit 
time.sleep(5) # Adjust to taste 

: Biz parçacığı yığın yumurtlama sonrası uyuyarak, bir dereceye çıktı kontrol döndürüldüğünde dikte ve bu nedenle olabilir yaklaşım, Python'u yerleştirmeye ve çalıştırmaya adanmış yeni bir sistem dizisi oluşturulmasında yatmaktadır. Python iş parçacığı oluşturduktan sonra, Python kodu kapatılıncaya kadar bir semafor veya bir şey üzerinde uyuyacaktı. Soru şu ki, iplik düzenli bir kapatma için nasıl işaret edilebilir? Benzer şekilde, "ana" blok tüm iş parçacıklarına basitçe() katılabilir; ipler sonra

cevap

1

Eğer pthread kütüphanesini dahil ettiniz ..

Çözümler büyük takdir C

den sinyal alması gerekir? Python gerçek parçacıkların mevcut olmadığını tespit ederse kukla ipliklere geri dönecektir.

+0

Dinamik olarak libpthread'e bağlanabilir. –