SORU
29 Ocak 2009, PERŞEMBE


Zaman aşımı Python bir işlev çağrısı

Durak ve senaryoyu yeniden başlatmak için zorlayabilir biliyorum ki Python ile bir fonksiyon arıyorum.

Nasıl işlevi arayayım mı yoksa eğer komut iptal eder ve başka bir şey yapar 5 saniyeden daha uzun sürerse o paket ne?

CEVAP
30 Ocak 2009, Cuma


Eğer UNIX üzerinde çalışan iseniz signal Paket kullanabilirsiniz:

In [1]: import signal

# Register an handler for the timeout
In [2]: def handler(signum, frame):
   ...:     print "Forever is over!"
   ...:     raise Exception("end of time")
   ...: 

# This function *may* run for an indetermined time...
In [3]: def loop_forever():
   ...:     import time
   ...:     while 1:
   ...:         print "sec"
   ...:         time.sleep(1)
   ...:         
   ...:         

# Register the signal function handler
In [4]: signal.signal(signal.SIGALRM, handler)
Out[4]: 0

# Define a timeout for your function
In [5]: signal.alarm(10)
Out[5]: 0

In [6]: try:
   ...:     loop_forever()
   ...: except Exception, exc: 
   ...:     print exc
   ....: 
sec
sec
sec
sec
sec
sec
sec
sec
Forever is over!
end of time

# Cancel the timer if the function returned before timeout
# (ok, mine won't but yours maybe will :)
In [7]: signal.alarm(0)
Out[7]: 0

10 saniye görüşme alarm.alarm(10), işleyicisi denir. Bu normal Python kodundan müdahale edebileceğiniz bir özel durum oluşturur.

Bu modül iyi iş parçacıkları (ama kim?) ile oynamıyor

Unutmayınzaman aşımı olduğunda biz bir istisna yükseltmek beri, yakalanıp, böyle bir işlevi örneğin: işlev içinde göz ardı sonunda olabilir

def loop_forever():
    while 1:
        print 'sec'
        try:
            time.sleep(10)
        except:
            continue

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • J Medema

    J Medema

    11 EKİM 2006
  • Joe DiFeo

    Joe DiFeo

    7 AĞUSTOS 2012
  • TheDigiCraft

    TheDigiCraft

    25 NİSAN 2011