我多线程化一个API,我想给每个线程一个唯一的ID,以便我可以在程序完成后根据索引处理响应。
以下是我目前正在使用的代码。问题是.getName()
不是唯一的。当线程被杀死时,标识符可以被回收。
对此有何解决方案?
def get_Data(q):
send = q.get()
while True:
api = op.API()
api_response['Thread_id'].append(threading.currentThread().getName())
response_api = api.Get(send, "json")
api_response['query_response'].append(response_api)
q.task_done()
def threading_0SM(request):
q = Queue(maxsize=0)
if len(chunk_request)<=16:
num_threads = len(request)
else: num_threads = 16
for i in range(num_threads):
worker = Thread(target=get_Data, args=(q,))
worker.setDaemon(True)
worker.start()
for place in request:
q.put(place)
q.join()
答案 0 :(得分:1)
您可以在创建线程时设置线程名称。我喜欢使用itertools.count
来创建程序唯一的数字,因为它是线程安全的。在这里,我用它来制作独特的线程名称。您可以更改格式以满足您的需求。
import itertools
# returns unique number on each next(unique_id)
unique_id = itertools.count()
def unique_thread_id():
return "mythread-" + str(next(unique_id))
def get_Data(q):
send = q.get()
while True:
api = op.API()
api_response['Thread_id'].append(threading.currentThread().getName())
response_api = api.Get(send, "json")
api_response['query_response'].append(response_api)
q.task_done()
def threading_0SM(request):
q = Queue(maxsize=0)
if len(chunk_request)<=16:
num_threads = len(request)
else:
num_threads = 16
for i in range(num_threads):
worker = Thread(target=get_Data, name=unique_thread_id(), args=(q,))
worker.setDaemon(True)
worker.start()
for place in request:
q.put(place)
q.join()
答案 1 :(得分:0)
尝试使用worker.get_ident()
https://docs.python.org/3/library/threading.html#threading.Thread.ident