Zunächst sollte der folgende Code idealerweise die 3 Greenlets synchron laufen lassen, aber stattdessen laufen alle 3 Greenlets asynchron. Das Seltsame ist jedoch, dass es einen zusätzlichen synchronen Prozess für das zweite Greenlet startet, egal wie viele Greenlets Sie haben. Ich stelle diese Frage nicht für eine Problemumgehung, es ist nur, dass ich den Grund dafür verstehen will.Warum die Anzahl der laufenden Greenlets höher ist als die tatsächliche Anzahl der erstellten Greenlets. 1 zusätzliches Greenlet läuft synchron
import gevent
import time
def func(i):
t = time.time()
print('func %s started at %s' % (i, t))
secs = 5
statement = "after %s secs" % secs
gevent.sleep(secs)
print('func %s stopped in %s secs' % (i, (time.time() - t)))
apps = [gevent.Greenlet.spawn(func, i) for i in range(3)]
[app.run() for app in apps]
Hier ist die Probe stdout:
func 0 started at 1491859273.2895772
func 1 started at 1491859273.2898045
func 2 started at 1491859273.2899446
func 0 stopped in 5.0095603466033936 secs
func 1 started at 1491859278.2993205
func 1 stopped in 5.0163233280181885 secs
func 2 stopped in 5.019707918167114 secs
func 1 stopped in 5.009198188781738 secs
Wie geschieht func 1 started
zweimal?
Könnten Sie über die konkreten Beobachtungen Sie tatsächlich sehen sein expliziter, und wie sie sich unterscheiden von dem, was Sie erwarten: jemals überhaupt genannt wird? (Einige Erklärung von * warum * Sie erwarten, dass die Verhaltensweisen, die Sie tun, auch nicht weh tun würden). –
Ist meine Frage klarer aus den obigen Änderungen? –
Dies hilft insofern, als es eine klare Beschreibung dessen bietet, was Ihr aktuelles Verhalten ist - aber was noch fehlt, ist eine Erklärung, warum Sie ein gegensätzliches/unterschiedliches Verhalten erwarten. –