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 şüphelifor 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
Dinamik olarak libpthread'e bağlanabilir. –