Как получить вывод в _thread? - PullRequest
0 голосов
/ 01 ноября 2019

Я создал функцию с Python для перехвата некоторых устройств, необходимости быстрого времени или идеи использования потоков. код Python, который я написал, функционирует, и очень быстро периферийные устройства отвечают (проверяется с помощью wire shark), но теперь мне нужно, чтобы у каждого потока был выход функции, которую я запускаю, чтобы они все были в выходном векторе. Как сохранить выходные данные каждого потока, который я запускаю с этой библиотекой "_thread"?

ниже приведен код, который я использовал:

import _thread
import time

import atenapy

try:
   tic = time.process_time()
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.172',9761,'5A0000005A'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2600000026'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.172',9761,'5100000051'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2700000027'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.172',9761,'5000000050'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'6000000060'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.172',9761,'5200000052'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2D0000002D'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.172',9761,'5700000057'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'5F0000005F'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.172',9761,'5300000053'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2200000022'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.172',9761,'5600000056'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2300000023'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.172',9761,'5500000055'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2B0000002B'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.172',9761,'5400000054'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2C0000002C'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'0C0000000C'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2800000028'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'0D0000000D'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2900000029'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'0E0000000E'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.170',9761,'2A0000002A'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'0F0000000F'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'1400000014'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'1800000018'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'1900000019'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'1A0000001A'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'1B0000001B'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'1C0000001C'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'1D0000001D'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'1E0000001E'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'1F0000001F'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'2000000020'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.164',9761,'2100000021'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.162',9761,'0200000002'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.162',9761,'0300000003'))
   _thread.start_new_thread(atenapy.connect_PE,('192.168.2.162',9761,'0800000008'))
   toc = time.process_time()
   print("all PE time pooling = "+str(toc - tic))
except:
   print ("Error: unable to start thread")

1 Ответ

0 голосов
/ 01 ноября 2019

Оберните вашу функцию в рабочую функцию, которая собирает результат и добавляет в список. Блокировка необязательна при добавлении в список (ссылка: Какие типы глобальных мутаций являются поточно-ориентированными ).

import threading

lock = threading.Lock()
results = []

def func(a,b):
    with lock:
        results.append(a+b)

threads = [threading.Thread(target=func,args=(a,b))
           for a in range(3) for b in range(3)]

for thread in threads:
    thread.start()

for thread in threads:
    thread.join()

print(results)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...