gpt4 book ai didi

python - python 中的线程和动态列表问题

转载 作者:行者123 更新时间:2023-12-01 03:39:03 24 4
gpt4 key购买 nike

我会尽量说清楚,希望大家都能理解,即使这对我来说并不容易。我是 python 编码的初学者,所以每一个帮助都会很好!我已经导入了这些库:请求和线程。我正在尝试并行发送多个网址以减少数据的发送时间。我使用动态列表来堆叠所有网址,然后使用 requests.post 发送它们。

l=[]
if ALARM&1:
alarmType="Break Alarm"
AlarmNumber = 1
sendAlarm(alarmType, AlarmNumber)
print alarmType
else:
s = "https://..." #the url works
l.append(threading.Thread(target=requests.post, args=(s)))
if ALARM&2:
alarmType=0
if ALARM&4:
alarmType="Limit Switch"
AlarmNumber = 2
sendAlarm(alarmType, AlarmNumber)
print alarmType
else:
s="https://..."
l.append(threading.Thread(target=requests.post, args=(s)))

for t in l:
t.start()
for t in l:
t.join()

我得到的错误是:

Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
TypeError: post() takes at most 3 arguments (110 given)

对于 Thread-2 也是如此,我询问了周围的人,但我们找不到解决方案。如果有人有想法?谢谢!

最佳答案

来自docs , args 应该是一个元组。

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})

args is the argument tuple for the target invocation. Defaults to ().

您需要传递 args 一个元组,其中 url 作为第一个(也是唯一的)元素:

l.append(threading.Thread(target=requests.post, args=(s,)))

这里看似无用的逗号使得 Pyhton 将 (s,) 解释为一个集合,而不仅仅是一个被不需要的括号包围的字符串。

如果不这样做,您基本上会传递一个字符串,并且 Thread 会对其进行迭代,将 post 每个字母作为单独的参数传递,因此会出现错误消息:

TypeError: post() takes at most 3 arguments (110 given)

将字符串解释为迭代器是一个常见的陷阱。函数/方法需要一个列表/集合,当提供像 "https://..." 这样的字符串时,它会将其视为 ['"', 'h', ' t'、't'、'p'、's'、':'、'/'、'/'、...]

不知何故,这个问题的根本原因是轶事。这里有趣的是,尽管我在阅读问题时对 Thread 一无所知,但错误消息 (TypeError: post() gets at most 3 argument (110给定)) 立即为我指明了正确的方向。

关于python - python 中的线程和动态列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39961315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com