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

  • 99being99

    99being99

    2 EYLÜL 2008
  • itfigueres

    itfigueres

    12 EKİM 2013
  • Make:

    Make:

    23 Mart 2006