2016-05-15 77 views
0

我想使用Python-Libtorrent來下載種子。我有一個問題,即暫停洪流不能按預期工作:Python Libtorrent:暫停洪流不按預期工作

import libtorrent as lt 
import time 

import sys 


def get_libtorrent_session_and_start_dht(start_port, end_port): 
    ses = lt.session() 
    ses.listen_on(start_port, end_port) 
    ses.add_dht_router('dht.transmissionbt.com', start_port) 
    ses.add_dht_router('router.bittorrent.com', start_port) 
    ses.add_dht_router('router.utorrent.com', start_port) 
    ses.start_dht() 
    return ses 


const_state_str = ['queued', 'checking', 'downloading metadata', \ 
        'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume'] 
const_pause_torrent = "pause_torrent" 
const_resume_torrent = "resume_torrent" 
const_kill_torrent = "kill_torrent" 
const_user_logged_in = "user_logged_in" 
const_user_logged_out = "user_logged_out" 
const_quit_seeding = "quit_seeding" 

ses = get_libtorrent_session_and_start_dht(6881, 6891) 

torrent_info = None 
torrent_handle = None 
try: 
    torrent_info = lt.torrent_info("/home/horvste/Downloads/ubuntu-14.04.4-desktop-amd64.iso.torrent") 
    torrent_handle = ses.add_torrent(
     {'ti': torrent_info, 'save_path': "/home/horvste/Downloads"}) 
except Exception as exception: 
    raise exception 

while not torrent_handle.has_metadata(): 
    print "Getting meta data" 
    time.sleep(1) 

current_iteration = 0 
while not torrent_handle.is_seed(): 
    torrent_status = torrent_handle.status() 

    print "current_iteration: " + str(current_iteration) 

    if current_iteration == 10: 
     print "Calling torrent_handle.pause()...Pausing Torrent" 
     sys.stdout.flush() 
     torrent_handle.pause() 
     while not torrent_handle.status().paused: 
      print "Torrent Is Not Paused Yet" 
      time.sleep(1) 
      sys.stdout.flush() 
     while torrent_handle.status().paused: 
      print "Torrent Is Paused!" 
      torrent_handle.pause() 
      time.sleep(1) 
      sys.stdout.flush() 


    if const_state_str[torrent_status.state] == "checking": 
     print 'Checking Torrent....' 
     continue 

    print '\r%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \ 
      (torrent_status.progress * 100, torrent_status.download_rate/1000, torrent_status.upload_rate/1000, \ 
      torrent_status.num_peers, const_state_str[torrent_status.state]), \ 
     sys.stdout.flush() 

    current_iteration += 1 

    if torrent_status.paused: 
     print "Is Paused" 
    else: 
     print "Is Not Paused" 

    time.sleep(1) 

下面是這個腳本的輸出:

...Previous Output Checking Torrent 
Checking Torrent.... 
current_iteration: 0 
4.17% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 0) downloading None 
Is Not Paused 
current_iteration: 1 
4.17% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 0) downloading None 
Is Not Paused 
current_iteration: 2 
4.17% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 4) downloading None 
Is Not Paused 
current_iteration: 3 
4.17% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 7) downloading None 
Is Not Paused 
current_iteration: 4 
4.17% complete (down: 1.0 kb/s up: 1.0 kB/s peers: 11) downloading None 
Is Not Paused 
current_iteration: 5 
4.17% complete (down: 4.0 kb/s up: 2.0 kB/s peers: 16) downloading None 
Is Not Paused 
current_iteration: 6 
4.17% complete (down: 52.0 kb/s up: 5.0 kB/s peers: 21) downloading None 
Is Not Paused 
current_iteration: 7 
4.17% complete (down: 132.0 kb/s up: 8.0 kB/s peers: 28) downloading None 
Is Not Paused 
current_iteration: 8 
4.26% complete (down: 234.0 kb/s up: 12.0 kB/s peers: 33) downloading None 
Is Not Paused 
current_iteration: 9 
4.31% complete (down: 317.0 kb/s up: 15.0 kB/s peers: 38) downloading None 
Is Not Paused 
current_iteration: 10 
Calling torrent_handle.pause()...Pausing Torrent 
Torrent Is Paused! 
Torrent Is Paused! 
Torrent Is Paused! 
4.31% complete (down: 418.0 kb/s up: 19.0 kB/s peers: 46) downloading None 
Is Not Paused 
current_iteration: 11 
4.44% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 10) downloading None 
Is Not Paused 
current_iteration: 12 
4.44% complete (down: 0.0 kb/s up: 1.0 kB/s peers: 12) downloading None 
Is Not Paused 
current_iteration: 13 
4.44% complete (down: 1.0 kb/s up: 2.0 kB/s peers: 21) downloading None 
...Torrent keeps downloading 

正如你可以從上面的腳本中看到的,我叫暫停的洪流句柄,並暫停3次循環,然後再次開始下載。值得注意的是,前面的腳本並沒有在這個while循環中調用torrent_handle.pause()重要的是:

while torrent_handle.status().paused: 
    print "Torrent Is Paused!" 
    torrent_handle.pause() 
    time.sleep(1) 
    sys.stdout.flush() 

我仍然得到同樣的輸出;洪流不會像預期的那樣暫停。我正在運行Ubuntu 14.04.4,並且所有內容都通過apt-get安裝。在libtorrent init.py中,我的版本號是version = '0.16.13.0'。我錯過了什麼或濫用圖書館?默認情況下

+0

有一個「備註」爲torrent_handle ::暫停的文件中框() – Arvid

回答

0

的種子被自動管理,可能把他們帶出來的停頓,檢查旗add_torrent_params