Zaman aşımı Python bir işlev çağrısı | Netgez.com
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

  • MagicofRahat

    MagicofRahat

    13 Temmuz 2007
  • MarinaHD2001

    MarinaHD2001

    7 ÅžUBAT 2009
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011