Форум сайта python.su
Сподіваюсь ніхто не буде проти, якщо я виражусь українською.
В мене виникла проблема в написанні скріпта для пересилання великих файлів мережею.
Я використовую такий код сервера (ця частина відповідає лише за пересилання данних клієнту):
self.path+='\\%s' % self.name
s=open(self.path,'rb')
datcl.send(s.read())
datcl.send('end of trusmition')
Відповідно кклієнтський скріпт приймання такий:
while 1:
dt=dat.recv(4096)
self.loaded+=dt
if dt.endswith('end of trusmition'): break
Ця штука працює, але при розмірах файлів більше 10 Mb виникають великі затримки і сервер практично висить.
Порадьте щось більш оптимальне, будь-ляска
Офлайн
Ну дык у тебя весь файл в память читается. Попробуй отдавать итератором. На досуге почитай
http://softwaremaniacs.org/blog/2006/04/18/controlled-download/ и http://softwaremaniacs.org/blog/2007/01/08/controlled-download-2/
Отредактировано (Фев. 16, 2008 07:01:10)
Офлайн
j2a
Дякую, дуже допомогло. Тепер все хоч і не дуже швидко, але стабільно пересилається!!!
Офлайн
DOMINUSв чем прикол писать вопросы на украинском, якщо підпис у вас російською?
j2a
Дякую, дуже допомогло. Тепер все хоч і не дуже швидко, але стабільно пересилається!!!
Офлайн
bialix, да всё равно. Я и без переводчика понял и вопрос, и ответ :) А вот то, что человек код в bb-тег code не обернул, то да - заслуживает порицания ;)
Отредактировано (Фев. 17, 2008 20:18:10)
Офлайн
100%
Офлайн
bialix
Підпис взятий з фільму і використовую я його в оригіналі :)
j2a
А код і так всі зрозуміли :)
До речі, я тільки починаю програмити і це перше більш-менш складне, що я зробив. Якщо є не дуже зайнятий народ, то через кілька днів можу закинути повний код ( після того як доведу його до ладу) на загальну оцінку, протестіть, так сказати і напишіть відгуки, можливо поради
Отредактировано (Фев. 19, 2008 03:02:14)
Офлайн
j2aопределенно.
А вот то, что человек код в bb-тег code не обернул, то да - заслуживает порицания ;)
Офлайн
В мене готовий більш-менш стабільний код севера і клієнта. Зараз сервер може передавати клієнту файли і папки. Це все працює лише в мережі.
Доступні команди:
list - показує вміст активної папки
chdir - перейти в нову папку, яку перед тим показав “ліст”
rootdir - перейти в кореневий розшар
updir - на рівень вверх
download - закачати папку або файл (файл повинен мати повну назву)
В клієнті передбачено, що у випадку вказання неправильного шляху для збереження, все буде копіюватись на диск С:
Сервер підтримує 2 команди:
add shares - додати папку до кореневого розшару
close server - закрити сервер при наступному конекті
Інтерфейс нульовий поки-що, за це не глуміться з мене. В найближчому часі планую додати конфіг-файл (xml) а також облік користувачів, закачок та іншої інфи за допомогою MySQL, а також веб-інтерфейс до бази данних. Планую налагодити це все для роботи також з нікс-подібними операційними ситемами.
І ще питання ламера: як і де можна вивісити 15kb коду?
Офлайн
DOMINUSА протокол какой?
В мене готовий більш-менш стабільний код севера і клієнта. Зараз сервер може передавати клієнту файли і папки. Це все працює лише в мережі.
Офлайн