Подключение интерфейса GUI с асинхронной (ыми) работой ftp - PullRequest
1 голос
/ 16 октября 2008

Попытка реализовать диалоговое окно для загрузки файлов, которое выглядит как нечто среднее между Диалог загрузки IE и Диалог загрузки Firefox с библиотекой Python GUI в Windows.

  1. Какие асинхронные (S) библиотеки FTP существуют для python? В идеале я должен иметь возможность делать резюме загрузки файлов и отслеживать ход каждой параллельной загрузки файлов.
  2. Если я запускаю каждую загрузку файла в отдельном процессе, как я могу получить статус загрузки и отобразить его в диалоговом окне индикатора выполнения?

Ответы [ 4 ]

1 голос
/ 16 октября 2008

Если вы хотите получить полный пример того, как использовать потоки и события для обновления вашего GUI с помощью долго выполняющихся задач с использованием WxPython, взгляните на эту страницу . Этот урок весьма полезен и помог мне выполнить программу, аналогичную вашей.

1 голос
/ 16 октября 2008

Если передача данных выполняется в отдельном потоке от графического интерфейса пользователя, вы можете использовать wx.CallAfter () всякий раз, когда вам нужно обновить индикатор выполнения из потока передачи данных.

Во-первых, использование CallAfter () является обязательным, поскольку функция wxPython не может быть вызвана из дочерних потоков.

Во-вторых, это разъединит выполнение передачи данных из графического интерфейса в основном потоке.

Обратите внимание, что CallAfter () работает только для потоков, а не для отдельных процессов. В этом случае использование многопроцессорного пакета должно помочь.

1 голос
/ 16 октября 2008

"ftplib" - это стандартная библиотека ftp, встроенная в Python. В Python 2.6 в метод, используемый для загрузки, был добавлен параметр обратного вызова.

Этот обратный вызов является функцией, которую вы предоставляете библиотеке; он вызывается один раз для каждого завершенного блока.

Ваша функция может отправить сообщение в графический интерфейс пользователя (возможно, в другом потоке / процессе, используя стандартную связь между потоками или между процессами), чтобы сообщить ей об обновлении индикатора выполнения.

Ссылка

0 голосов
/ 19 октября 2008

Если вы не можете использовать ftplib в Python 2.6, есть компания, предлагающая коммерческое решение.

Chilkat's CKFTP2 стоит несколько сотен долларов, но обещает работать с Python 2.5 и предлагает вызов функции get_AsyncBytesSent (), который возвращает необходимую информацию. (Я не видел обратного вызова, но он также может предложить это.)

Я не использовал этот продукт.

Также учтите, что если FTP окажется слишком сложным / дорогостоящим, вы всегда можете вместо этого переключиться на HTTP-загрузку. У Chilkat есть бесплатная библиотека загрузки HTTP / HTTPS.

...