2015-11-20 14 views
5

Bir C++ DLL arayarak bir Python uygulaması tasarlama, benim DLL ve Python 3.4 here arasında benim etkileşimi gönderdiniz. Ama şimdi bir iş parçacığı tabanlı modeli kapsayan akışı içinde bazı işlemi yapmanız gerekmektedir ve benim geri arama işlevi, bir kuyrukta tüm print ler ve benim akışı bittikten yalnızca içinde, bütün Bilgisi yazdırılır koymak görünüyor.Python 'baskı' ++ tabanlı iş parçacığı modeli

def callbackU(OutList, ConList, nB): 
    for i in range(nB): 
     out_list_item = cast(OutList[i], c_char_p).value 
     print("{}\t{}".format(ConList[i], out_list_item)) 
    return 0 

sonraki yollarını kullanmayı denedi, ama hepsi aynı şekilde çalışmaya görünür:

from threading import Lock 

print_lock = Lock() 
def save_print(*args, **kwargs): 
    with print_lock: 
    print (*args, **kwargs) 

def callbackU(OutList, ConList, nB): 
    for i in range(nB): 
     out_list_item = cast(OutList[i], c_char_p).value 
     save_print(out_list_item)) 
    return 0 

ve:

import sys 
def callbackU(OutList, ConList, nB): 
    for i in range(nB): 
     a = cast(OutList[i], c_char_p).value 
     sys.stdout.write(a) 
     sys.stdout.flush() 
    return 0 

bunu isterim benim geri arama tüm süreç sona erdiğinde değil, çağrıldığında mesajını yazdırır.

+0

yeniden yazmak doğal dilde olduğu gibi, soru, ben bir şey anlayamadık Lütfen! –

+0

Tamam, çünkü ben bir yerli konuşmacı değilim, ama diğer sorumu anlayabiliyorsun? Ya da diğerini daha iyi açıklamalı mıyım? –

+1

OT: neredeyse hiç "diğer sorum" bağlantılarını okur, bunun yerine geçerli özeti eklemek çok daha iyidir. Öte yandan, iyi bilinen konulara veya kaynaklara (ör., Wiki: DAG veya pypi: cffi) bağlanması memnuniyetle karşılanır. –

cevap

2

Ben sonuna daha önce belirsiz bir süre için kalmak için ihtiyacı olan bir iş parçacığı tabanlı süreç kullanıyorum, sorunun ne olduğunu bulabilirsiniz. C++ 'de işlemin bitmesi için beklemek için getchar() kullanıyorum, daha sonra enter düğmesine bastığımda işlem atlatma parçasına atlayın. Ben de kesin bir zaman bana yardımcı olabilir test etmek geçene kadar bir while içinde 0,5 saniyelik sleep() s kullanmaya çalıştık ama olmadı. Her iki yöntem de Python uygulamasında aynı şekilde çalıştı, akışta sahip olmak istediğim değerler önce kuyruğa konuldu ve işlem bu değerlerin sonlandırılmadığı sürece.

çözeltisi

iki işlev, iplik tabanlı modeli başlatmak için eski bir yapmaktı. Ve sonuncusu işlemi bitirir. Bunu yaparak getchar()'a da gerek duymamıştım. sleep(). Bu bana oldukça iyi geliyor!, İlginiz için teşekkürler!

İlgili konular