- 此问题在此处已有答案**:
With "args" vs without "args" to pass arguments to a thread in Python(1个答案)
十小时前关门了。
我正在尝试使用python在一个服务器上自动注册我的帐户。我决定求助于多线程。我在控制台中输入了我需要的线程数,但是它们不是异步启动的。首先,第一个线程完成它的工作,然后第二个线程启动,以此类推。结果,这样的程序工作得非常慢,如何解决这个问题?
〈---启动多线程(这里我将登录基数拆分为线程数,每个线程最多100/10 = 10个登录,并将它们转移到线程本身)---〉
for v in range(int(thread_count)):
if(lines[v]):
worker = Thread(target=sendRequest(v, lines[v], proxies, proxy_type))
threads.append(worker)
for x in threads:
x.start()
〈---对于传递给流的每一行,我创建一个异步请求---〉
def sendRequest(th_count, names, proxy, proxy_type):
for x in names:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
res = loop.run_until_complete(register(x, proxy, proxy_type, th_count))
loop.close()
〈---发送get请求的函数如下---〉
async def checking(name, proxy_array, proxy_type, th):
random_proxy = proxy_array[random.randint(0, len(proxy_array) - 1)].rstrip()
if proxy_type == 0:
prox = f'socks4://{random_proxy}'
proxies = {
'http': prox,
'https': prox
}
elif proxy_type == 1:
prox = f'socks5://{random_proxy}'
proxies = {
'http': prox,
'https': prox
}
try:
r = requests.get("https://www.google.com/", proxies=proxies, timeout=3)
print(f'{th} - {r}')
except:
print('err')
我什么都试过了,但是它仍然工作得很长,我不知道我做错了什么。但是线程不想同时运行
1条答案
按热度按时间8cdiaqws1#
你有一部分:
Thread
初始化器的第一个参数应该是对"worker"函数的引用,在本例中是sendRequest
,您希望多线程的参数,而其余参数将是在线程启动后传递给辅助函数的实际参数。* args * 关键字参数用于传递要传递给辅助函数的所有位置参数的一个 * iterable *,以及 * kwargs * keyword arguments用于传递一个字典,其中包含关键字参数名称和值,这些名称和值将作为关键字参数传递给辅助函数。您所做的只是将单个参数传递给
Thread
初始值设定项,该参数是在当前线程 * 中调用sendRequest(v, lines[v], proxies, proxy_type)
* 的返回值。此返回值似乎是None
,它查看sendRequest
的函数定义,但不是合法的函数引用。因此,所有start
请求都将失败。因此,实际上不是传递函数引用,而是调用函数并传递其返回值。你需要的是: