将线程名称作为全局变量传递给函数

Passing thread names as gloabl variables to a function

我有点卡住了,我正在尝试将系统给出的线程名称传递给我的函数,以便我可以打印在该函数中工作的当前线程的开始和结束时间,我正在使用全局变量名称。用户必须在给定的时间间隔内输入一个数字。当我输入 1001 时,线程名称工作正常,但如果我输入 1200 或 10001 之类的数字,则名称不再适合。我放了输出示例,输出 1 不是我要的,输出 2 是我需要的。我不确定是什么导致名称更改。如果需要任何其他信息,我很乐意提供

import os
from posixpath import abspath
import time
import sys
import signal
import threading
import platform
import subprocess
from pathlib import Path
import math
lokot = threading.Lock()
lista = []
name = 0
name3 = 0
def divisor(start,end):
    lokot.acquire()
    start = time.time()
    print('{} started working at {}'.format(name, start))
    for i in range(int(start),int(end)+1):
        if int(end) % i == 0:
            lista.append(i)
    end = time.time()
    print('{} ended working at {}'.format(name, end))
    lokot.release()
def new_lista():
    lokot.acquire()
    start = time.time()
    nlista = []
    for i in lista:
        if i % 2 == 0:
            nlista.append(i)
    print(nlista)
    print('{} was executed in time frame {}'.format(name3,time.time()-start))
    lokot.release()

def f4():
    while (True):
        print ('Input a non negative number in given range <1000,200000>')
        number = input()
        if number.isalpha() or not number or int(number) not in range(1000,200000) :
            print('Number entered is not in the interval <1000,200000>')
            continue
        else:
            global name
            global name3
            x = int(number) / 2
            t1 = threading.Thread(target=divisor, args=(1, x))
            t2 = threading.Thread(target=divisor, args=(1, number))
            t3 = threading.Thread(target=nova_lista)
            name = t1.name
            t1.start()
            name = t2.name
            t2.start()
            name3 = t3.name
            t3.start()
            t1.join()
            t2.join()
            t3.join()
            break

Input 1:
100001
Output 1:
Thread-1 started working at 1624538800.4813018
Thread-2 ended working at 1624538800.4887686
Thread-2 started working at 1624538800.4892647
Thread-2 ended working at 1624538800.5076165
[2, 4, 8, 10, 16, 20, 40, 50, 80, 100, 200, 250, 400, 500, 1000, 1250, 2000, 2500, 5000, 6250, 10000, 12500, 25000, 50000]
Thread-3 dwas executed in time frame 0.0
Input 2:
1001
Output 2:
Thread-1 started working at 1624538882.90607
Thread-1 ended working at 1624538882.9070616
Thread-2 started working at 1624538882.9074266
Thread-2 ended working at 1624538882.9089162
[2, 4, 8, 10, 20, 40, 50, 100, 200, 250, 500, 1000, 1250, 2500, 5000]
Thread-3 dretva se izvodila 0.0

这不一定有效:

name = t1.name
t1.start()
name = t2.name

没有什么能阻止在 t1 线程访问 name 变量之前发生第二次赋值。

问:为什么在创建线程时不直接分配名称,而是让 Threading 库分配它们?例如;

t1 = threading.Thread(target=divisor, args=(1, x), name="t1")