pytest-dev / pytest-dev/execnet
`remote_exec` hangs forever when remotely using `gevent` model only at python3
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 102
- Forks
- 47
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
The problem only occurs at python3.
Environment:
- OS:
Linux faa410b1f09b 4.19.121-linuxkit #1 SMP Thu Jan 21 15:36:34 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux - Python version:
Python 3.7.5
Dependencies:
- gevent version:
21.1.2 - execnet version:
1.8.0
Code:
import execnet
# hangs forever when remote is gevent
execnet.set_execmodel('thread', 'gevent')
gw = execnet.makegateway()
print(gw)
print(gw.remote_status())
print('channel.send')
print (gw.remote_exec("channel.send(333)").receive())
print('everything done')
Problem: Above code hangs forever.
Stdout:
<Gateway id='gw0' receive-live, thread model, 0 active channels>
<RInfo 'execmodel=gevent, numchannels=0, numexecuting=0'>
channel.send
Debug log:
[89653] gw0 sent <Message STATUS channel=1 lendata=0>
[89653] gw0 [receiver-thread] RECEIVERTHREAD: starting to run
[89655] creating workergateway on <execnet.gateway_base.Popen2IO object at 0x1106a5820>
[89655] gw0-worker [serve] spawning receiver thread
[89655] gw0-worker [serve] joining receiver thread
[89655] gw0-worker waiting for receiver thread to finish
[89655] gw0-worker [receiver-thread] RECEIVERTHREAD: starting to run
[89655] gw0-worker [receiver-thread] received <Message STATUS channel=1 lendata=0>
[89655] gw0-worker sent <Message CHANNEL_DATA channel=1 lendata=73>
[89653] gw0 [receiver-thread] received <Message CHANNEL_DATA channel=1 lendata=73>
[89653] gw0 [receiver-thread] received <Message CHANNEL_CLOSE channel=1 lendata=0>
[89655] gw0-worker sent <Message CHANNEL_CLOSE channel=1 lendata=0>
[89653] gw0 1 channel.__del__
[89653] gw0 sent <Message CHANNEL_EXEC channel=3 lendata=31>
[89655] gw0-worker [receiver-thread] received <Message CHANNEL_EXEC channel=3 lendata=31>
The code hangs while executing remote_exec. The problem only occurs when remote thread model is gevent.
I guess the problem occurred because while gevent is rapidly syncing with python3, execnet was not maintained :C.
Maybe related to function mapping when making ExecModel:
https://github.com/pytest-dev/execnet/blob/894533a515baf526c35ea0fe525b4866c6824ab8/execnet/gateway_base.py#L112-L125
I know this repo is unmaintained. Hoping for receiving someone's help!
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Reproduzieren Sie den Hänger mit dem Python-3-Beispiel unter Verwendung der thread-to-gevent-Konfiguration von execnet und der im Issue aufgeführten Versionen. Beginnen Sie mit der Untersuchung der ExecModel-Zuordnung in execnet/gateway_base.py im Bereich der Zeilen 112–125, und verfolgen Sie dann remote_exec durch den Receiver und die Worker-Threads. Als abgeschlossen gilt die Aufgabe, wenn der Remote-Aufruf 333 zurückgibt und das Programm „everything done“ erreicht, ohne hängen zu bleiben.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- distributed-systems
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100