我会尽量说清楚,希望每个人都能理解,即使这对我来说并不容易。 我是python代码的初学者,所以每一个帮助都会很好! 我已经导入了这些库:请求和线程。 我试图在并行发送几个网址,以减少数据的发送时间。我使用动态列表来堆叠所有URL,然后使用请求.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应该是一个元组。你知道吗
您需要传递
args
一个元组,其中url是第一个(也是唯一一个)元素:这里看似无用的逗号使Pyhton将(s,)解释为一个集合,而不仅仅是一个被不需要的括号包围的字符串。你知道吗
如果做不到这一点,基本上就是传递一个字符串,然后
Thread
对其进行迭代,将post
每个字母作为一个单独的参数传递,因此出现错误消息:将字符串解释为迭代器是一个常见的陷阱。函数/方法需要一个列表/集,当提供一个类似于
"https://..."
的字符串时,它将其视为['"', 'h', 't', 't', 'p', 's', ':', '/', '/',...]
。你知道吗问题的根本原因是一些轶事。有趣的是,尽管我在阅读问题时对
Thread
一无所知,但错误消息(TypeError: post() takes at most 3 arguments (110 given)
)却立刻指出了正确的方向。你知道吗相关问题 更多 >
编程相关推荐