2016-10-10 5 views
1

모든 사람이 쉽게 이해할 수 없을지라도 나는 분명히하려고 노력할 것입니다. 저는 파이썬으로 코딩하는 초보자이므로 모든 도움이 좋을 것입니다! librairies 가져 오기 : 요청 및 스레딩. 데이터 전송 시간을 줄이기 위해 parrallel 여러 URL을 보내려고합니다. 동적 목록을 사용하여 모든 URL을 쌓은 다음 requests.post를 사용하여 URL을 보냈습니다.파이썬에서 스레드와 동적 목록과 관련된 문제

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) 

과 같은 일 스레드 2, 나는 내 주위에 물어하지만 우리는 해결책을 찾을 수 없습니다. 누군가 아이디어가 있다면? 감사 !

답변

2

docs에서 args는 튜플이어야합니다.

클래스 threading.Thread (그룹 = 없음, 목표 = 없음, 이름 = 없음, 인수의 =() kwargs로 = {})

인수 대상 호출을위한 인수 튜플이다. 기본값은()입니다.

당신은 args 첫 번째 (유일한) 요소로 URL을 튜플 전달해야 세트로

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

여기 보이는 쓸모 쉼표 Pyhton 해석 만드는 것입니다 (들) 및 불필요한 괄호로 둘러싸인 문자열 만이 아닙니다.

이 작업을 수행하지 못하면, 당신은 기본적으로, 별도의 인수로 post 각 문자를 통과, 따라서 오류 메시지 문자열, 그것에 Thread 반복 전달되고 있습니다

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

하는 문자열 반복자로 해석되는 것은 일반적인 함정입니다. 함수/메소드는리스트/세트를 기대하며 "https://..."과 같은 문자열이 제공되면 ['"', 'h', 't', 't', 'p', 's', ':', '/', '/',...]처럼 취급합니다.

문제의 근원은 어떻게 든 일화입니다. 여기서 흥미로운 점은 질문을 읽을 때 Thread에 대해 알지 못했지만 오류 메시지 (TypeError: post() takes at most 3 arguments (110 given))가 바로 올바른 방향으로 나를 가리켰다는 것입니다.

+1

'args = (s,)'를 사용하면 튜플을 정의하기에 충분하지만 주변에 여분의 괄호가 필요하다고 생각하지 않습니까? 또한 OP 요소 문제의 근본 원인 인 단일 요소 튜플에 쉼표가 필요하다는 것을 명확히하는 것이 가치 있다고 생각합니다. – SiHa

+0

@SiHa : 좋은 지적. OP는 세트를 사용하려고했지만 특정 포인트를 놓친 것 같습니다. –

+0

Jerome에게 감사드립니다. 나는 그것에 시간을 보냈다! 더 신중해야하고 문서를 더보아야합니다 .. 다시 한번 감사드립니다! – GarennePb

관련 문제