Python » Страница 773

-

Программирование на Python



dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#7721

я уже писал выше, демон и основная программа общаются через временные файлы. В твоем случае, например, демон периодически считывает содержимое файла, созданного основной программой, и пока там что-то есть, он работает, как только пустой файл- открывается замок, os.abort итп. И нужно побеспокоиться, чтоб избежать неувязки с одновременным использованием файла основной программой и демоном
-------------
добавлено в 17.33: собственно, простейший замок это while 1 в конце скрипта и в теле цикла считывать файл, задержка ao_sleep какая-то, при условии что файл пуст/отсутствует/итп - break, демон закроется, вместо замка Ao_lock.

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#7722

Лучше задействовать еще один файл и открывать его в проге для записи. В демоне пытаться открыть для чтения и как только получилось - завершаться.
-------------
добавлено в 22.04: Или одним файлом читая уже через мод rb+

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#7723

Да, так надежней будет еще, как выше написал JOIN_ME, демон гарантированно прекратит работу, даже если основная программа по какой-то причине упадет.

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#7724

f1=open('d:\\1', 'wb+')
f2=open('d:\\1', 'rb+')
f2.write('123')
f1.write('000456')
содержимое файла '123456'
почему? %) как? О_о как с этим дальше жить? О_О
-------------
добавлено в 11.09: f1=open('d:\\1', 'wb+')
f2=open('d:\\1', 'rb+')
f2.write('123')
f1.write('000456')
содержимое файла '123456'
почему? %) как? О_о как с этим дальше жить? О_О

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#7725

JOIN_ME,
а как это правильно объяснить в этом случае? Вижу, что последний файловый объект главнее предыдущего, пишет поверх, типа как в topwindow? Или что?

nur87


репутация: 60
на сайте с 2006 года
сообщений: 559

Explay Golf

Казань

Возраст - 38

#7726

а у меня что то все норм получилось, python 2.7.2 win

>>> f1=open('c:/1','wb+')
>>> f2=open('c:/1','rb+')
>>> f2.write('123')
>>> f1.write('000456')
>>> f2.close()
>>> f1.close()
>>> f=open('c:/1')
>>> print f.read()
000456

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#7727

Проставил между двумя записями паузу и нормально стало. Получается функции асинхронны.

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#7728

Я недавно с таким столкнулся, тоже хотел, чтобы в файл можно было писать и читать одновременно (dimy44 должен знать, мы о похожем говорили не так давно в комментах к одной записи ;), очень обломало.
open, кстати, принимает ещё доп. параметром уровень буферизации. Я ставил без неё, ноль эффекта, пришлось отложить идею.

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#7729

Один байт в буфер пробовал?
-------------
добавлено в 23.12: Ноль если проставить, то пишет сразу.
-------------
добавлено в 23.13: Щас попробовал. С единицей не пишет пока дескриптор не закрыт, а с нулем сразу пишет.

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#7730

дык 1 вроде как это не 1 байт, а построчная буферизация?
-------------
добавлено в 22.58: без буферизации быстрее, от нефиг делать проверил

from time import clock as c
txt = 'abc' * 1000000
f1 = open('d:\\1', 'w+')
f2 = open('d:\\2', 'w+', 0)
t0 = c()
f1.write(txt)
t = c() - t0
print t
t0 = c()
f2.write(txt)
t = c() - t0
print t
f1.close()
f2.close()
>>>
1.234375
0.796875
>>>


Яндекс.Метрика