2016-05-15 8 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 итерации цикла и начинает загрузку снова. Важно отметить, что предыдущий сценарий не имел 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

 Смежные вопросы

  • Нет связанных вопросов^_^