Python:スレッド。 SyntaxError:キーワードargの後の非キーワードarg

スレッドとして特定の関数を実行したかったのですが、

SyntaxError: non-keyword arg after keyword arg

そして、なぜ私は理解していない:

#!/usr/bin/env python
import sys
import arduinoReadThread
import arduinoWriteThread
import socket
import thread

bolt = 0
socketArray=list()
HOST ="localhost"
PORT1 =50000
PORT2 =50001

def readAndParseArgv():
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM ) #create an INET, STREAMing socket
    s.bind((HOST,PORT1)) #bind to that port
    print "test"
    s.listen(2) #listen for user input and accept 1 connection at a time.
    socketArray.append(s)
    s2=socket.socket(socket.AF_INET, socket.SOCK_STREAM ) #create an INET, STREAMing socket
    s2.bind((HOST,PORT2)) #bind to that port
    print "test"
    s2.listen(2) #listen for user input and accept 1 connection at a time.
    socketArray.append(s2)

def socketFunctionWrite1():
    print threadName
    client, address = s1.accept()
    while(bolt == 0):
        print "Writing connections"
        if len(s1ToWriteList) > 0:
            client.send(s1ToWriteList.pop(0))

def socketFunctionRead1():
    client, address = s2.accept()
    while(bolt == 0):
        f = client.recv(1024)
        print "reading connection"
        s1ToWriteList.append(f)
        print len(s1ToWriteList)

def socketFunctionWrite2():
    client, address = s2.accept()
    while(bolt == 0):
        print "Writing connections"
        if len(s2ToWriteList) > 0:
            client.send(s2ToWriteList.pop(0))

def socketFunctionRead2():
    client, address = s1.accept()
    while(bolt == 0):
        f = client.recv(1024)
        print "reading connection"
        s2ToWriteList.append(f)
        print len(s2ToWriteList)

def shutDown():
    test = raw_input("Quit ?")
    if(test =="y"):
        bolt = 1
    else:
        shutDown()

thread.start_new_thread(target=socketFunctionRead1,())
thread.start_new_thread(target=socketFunctionWrite1,())
thread.start_new_thread(target=socketFunctionRead2,())
thread.start_new_thread(target=socketFunctionWrite2,())

readAndParseArgv()
spreadSockets()

I want to open these sockets as threads. I do not get why I get the non-keyword error, as the function I want to run as a thread is socketFunctionRead1

エラー:

  File "pythonbis.py", line 79
    thread.start_new_thread(target=socketFunctionRead1,())
SyntaxError: non-keyword arg after keyword arg
1
done :)、sry私はこれを先にやったことはありませんでした。
追加された 著者 Lucas Kauffman,
完全なエラースタックを貼り付けることはできますか?エラーを正確にトリガする行は何ですか?
追加された 著者 mac,
NP。とにかくあなたがする前にもそれを手に入れました!私の編集された答えを見てください! :)
追加された 著者 mac,

3 答え

ドキュメントでは、 thread.start_new_thread 呼び出しは:

thread.start_new_thread(function, args[, kwargs])

あなたがそれを呼び出す方法は次のとおりです:

thread.start_new_thread(target=socketFunctionRead1,())

()の前に target = socket ... と言っています。/code>

EDIT: just to clarify. The solution is either to remove the keyword to the first argument or to add it to the second.

HTH!

1
追加された
thread.start_new_thread(target=socketFunctionRead1,())
thread.start_new_thread(target=socketFunctionWrite1,())
thread.start_new_thread(target=socketFunctionRead2,())
thread.start_new_thread(target=socketFunctionWrite2,())

する必要がある

thread.start_new_thread((),target=socketFunctionRead1)
thread.start_new_thread((),target=socketFunctionWrite1)
thread.start_new_thread((),target=socketFunctionRead2)
thread.start_new_thread((),target=socketFunctionWrite2)

after キーワード引数を位置指定することはできません。これはPythonのどのメソッドでも当てはまります。

0
追加された
私は本当にそうは思わない:()は関数ではない...
追加された 著者 mac,
あなたは正しい@macです
追加された 著者 Burhan Khalid,

ターゲットキーワードを削除してみてください:

thread.start_new_thread(socketFunctionRead1, ())

文書化された構文は次のとおりです。

thread.start_new_thread(function、args [、kwargs])¶新しいスレッドを開始する   その識別子を返します。スレッドはfunction関数を実行する   引数リストargs(これはタプルでなければなりません)。オプション   kwargs引数は、キーワード引数の辞書を指定します。いつ   関数が戻ると、スレッドは自動的に終了します。関数   未処理の例外で終了し、スタックトレースが出力され、   スレッドは終了します(他のスレッドは引き続き実行されます)。

エラーの原因については、キーワード引数のチュートリアルで説明しています。要するに、キーワード引数は位置があいまいになるため、位置引数の前に置くことはできません。

0
追加された