0

私は次のクラスを持っています

queue = Queue.Queue()
class SpectraProcessing(threading.Thread):
    def __init__(self, queue, pbar = None, image_infos = []):
        threading.Thread.__init__(self)
        self.queue = queue
        self.pbar = pbar
        self.image_infos = image_infos

    def run(self):
        while True:
        spectrum = self.queue.get()
        self.image_infos.append(get_spectrumInfos(spectrum))

        #signal to queue job has been done
        if self.pbar:
            self.pbar.update(self.pbar.currval + 1)
        self.queue.task_done()

msrun は、クラス Reader で作成された Spectrum オブジェクトに対する反復子です。

msrun = pimzml.run.Reader(file_imzML, file_ibd, MSn_Precision = 250e-6)

各スペクトル オブジェクトには、(最初は [] である) 強度 (float 値) を含む属性リストがあります。私の主な機能にはこれが含まれています:

number_spectra = len(msrun)   
print "start creating the image from spectra..."
pbar = ProgressBar( maxval = number_spectra ).start()

#spawn a pool of threads, and pass them a queue instance
image_infos = []
for i in range(number_spectra):
    t = SpectraProcessing(queue, pbar, image_infos)
    t.setDaemon(True)
    t.start()
#populate queue with data
for spectrum in msrun:
    queue.put(spectrum)

#wait on the queue until everything has been processed
queue.join()

get_spectrumInfos(spectrum)run メソッドによって呼び出される関数は、各スペクトルの強度のリストを処理します (リストを強度で埋めます...)。実行すると、強度のリストがNoneType(つまり、空)であるというエラーが表示されますが、エラーなしで実行される場合があります。Threads を使用しなくてもエラーは発生しません。

どうもありがとうございます。

4

0 に答える 0