[Python] thread.start() blijft hangen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • williewonka03
  • Registratie: Augustus 2010
  • Laatst online: 16-06-2024
hallo allemaal,
ik ben bezig met een chatprogramma te maken in python 3 en ik loop tegen het voglende probleem aan.
ik heb een functie in een thread maar de thread.start() functie blocked ipv dat ie de thread start en dan verder gaat. ik had eerst als functie in de thread het volgende:
Python:
1
2
3
4
5
def ServerInput(s,clientname):
    while True:
        serverinput = str(s.recv(1024), "utf-8")
        if clientname not in serverinput and "OK" not in serverinput:
            print(serverinput)

toen heb ik rondgezocht en bleek dat de s.recv kan blocken. dus toen heb ik het verandert naar dit om het te testen:
Python:
1
2
3
4
5
6
7
def ServerInput(s,clientname):
    while True:
        #serverinput = str(s.recv(1024), "utf-8")
        serverinput = "test"
        if clientname not in serverinput and "OK" not in serverinput:
            print(serverinput)
            time.sleep(1)

en ik krijg vervolgens als output netjes om de seconde een "test" geprint. dus de thread zelf werkt wel. het probleem is alleen dat de code na de thread.start() call niet uitgevoerd wordt
dus ik creeër de thread op deze manier:
Python:
1
2
3
4
    thread = threading.Thread(target=ServerInput(sock,NAME))
    thread.deamon = True
    thread.start()
    print("thread started")

maar die "thread started" krijg ik nooit te zien. ik kan op google geen oplossingen hiervoor vinden. wie o wie kan mij hiermee helpen? alvast bedankt! _/-\o_

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Wat je nu doet is dat je als target voor Thread() het resultaat van ServerInput(sock, NAME) meegeeft.

In plaats daarvan wil je het volgende doen:

Python:
1
thread = threading.Thread(target=ServerInput, args=(sock, NAME))

Rustacean


Acties:
  • 0 Henk 'm!

  • williewonka03
  • Registratie: Augustus 2010
  • Laatst online: 16-06-2024
ok ik ben dom, het moet natuurlijk zijn:
Python:
1
thread = threading.Thread(target=ServerInput, args=(sock,NAME))

maar als ik nu de socket erin activeer dan doet de input statement het weer niet
Python:
1
2
3
        while 1:
            clientinput = input(NAME+': ')
            #doe verzenden van input

de input statement doet het 1 keer maar de loop komt niet terug.

EDIT: haha djc kwam er op hetzelfde moment op.
EDIT2: ok het huidige probleem is niet gerelateerd aan dit topic. hier kan een slotje op

[ Voor 14% gewijzigd door williewonka03 op 31-10-2013 15:59 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij