Как размонтировать карту флэш-памяти с интерфейсом USB (который совместно используется по Samba), не имея необходимость выключать Samba сначала?

У меня есть Карта памяти, которая совместно используется по сети через долю Samba. Это вызвано тем, что содержанием должен управлять удаленный пользователь.

Теперь, существует локальный пользователь с физическим доступом к Карте памяти. После того как удаленный пользователь закончил "управлять" Картой памяти, он дает локальному пользователю команду размонтировать диск для сохранности.

Однако, так как карта флэш-памяти с интерфейсом USB в настоящее время совместно используется по Samba, операция размонтирования не может следовать без процесса Samba за сначала выпуском файловой системы Карты памяти. Это - нежелательный, потому что остановка Samba влияла бы на многих других пользователей, использующих другие доли Samba.

Там какой-либо путь состоит в том, чтобы обойти эту проблему? Или я делаю его неправильно во-первых? Или что, если локальный пользователь просто вытаскивает Карту памяти так или иначе? Это вызовет какие-либо проблемы?

0
задан 5 June 2014 в 10:54

7 ответов

Я предложил бы, чтобы Вы старались избегать from foo import bar импорт. Я только использую их в пакетах, где разделение на модули является деталью реализации и не будет многих из них так или иначе.

Во всех других местах, куда Вы импортируете пакет, просто использование import foo и затем ссылаетесь на него полным именем foo.bar. Таким образом, можно всегда говорить, куда определенный элемент прибывает из и не должен вести список импортированных элементов (в действительности, это всегда устареет и не импортировать больше используемые элементы).

, Если foo действительно длинное имя, можно упростить его с import foo as f и затем записать f.bar. Это все еще намного более удобно и явно, чем поддержание весь from импорт.

4
ответ дан 5 February 2011 в 19:50

Это действительно имеет несколько недостатков.

Тестирование

На всякий случай Вы хотите протестировать свой модуль посредством модификации во время выполнения, это может сделать это более трудным. Вместо того, чтобы делать

import mymodule
mymodule.othermodule = module_stub

необходимо будет сделать

import othermodule
othermodule.foo = foo_stub

, Это означает, что необходимо будет исправить othermodule глобально, в противоположность просто изменению, на что указывает ссылка в mymodule.

Зависимость, Отслеживающая

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

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

Примечания По Производительности

из-за пути модули кэшей Python, нет хита производительности. На самом деле, так как модуль находится в локальном пространстве имен, существует небольшой выигрыш в производительности к импорту модулей в функции.

Главный Импорт

import random

def f():
    L = []
    for i in xrange(1000):
        L.append(random.random())

for i in xrange(10000):
    f()


$ time python test.py 

real   0m1.569s
user   0m1.560s
sys    0m0.010s

Импорт в Теле функции

def f():
    import random
    L = []
    for i in xrange(1000):
        L.append(random.random())

for i in xrange(10000):
    f()

$ time python test2.py

real    0m1.385s
user    0m1.380s
sys     0m0.000s
53
ответ дан 5 February 2011 в 19:50

Люди объяснили очень хорошо, почему избежать встроенного импорта, но не действительно альтернативных рабочих процессов для обращения к причинам, Вы хотите их во-первых.

мне нелегко вычищать вверх и вниз по исходным файлам для выяснения то, что импорт модуля доступен и т.д

Для проверки на неиспользованный импорт, который я использую pylint. Это делает статичный (выход) - анализ кода Python и один из (много), вещами, на которые это проверяет, является неиспользованный импорт. Например, следующий сценарий..

import urllib
import urllib2

urllib.urlopen("http://stackoverflow.com")

.. сгенерировал бы следующее сообщение:

example.py:2 [W0611] Unused import urllib2

Что касается проверки доступного импорта, я обычно полагаюсь на (довольно упрощенное) завершение TextMate - когда Вы нажимаете Esc, это завершает текущее слово с другими в документе. Если я сделал import urllib, urll[Esc] расширится до urllib, если не я перейду к запуску файла и добавлю импорт.

3
ответ дан 5 February 2011 в 19:50

С точки зрения производительности Вы видите это: операторы импорта Python должны всегда быть наверху модуля?

В целом, я только использую локальный импорт для повреждения циклов зависимости.

2
ответ дан 5 February 2011 в 19:50

Я полагаю, что это - рекомендуемый подход в некоторых случаях/сценариях. Например, в ленивой загрузке Google App Engine большие модули рекомендуются, так как она минимизирует стоимость прогрева инстанцирования нового Python VMs/interpreters. Взгляните на Инженер Google презентация, описывающая это. Однако имейте в виду, что это не делает средний, Вы должны ленивая загрузка все Ваши модули.

2
ответ дан 5 February 2011 в 19:50

Вы могли бы хотеть смотреть на оператор Import наверху в Python Wiki. Короче говоря: если модуль был уже загружен (взгляд sys.modules), Ваш код будет работать медленнее. Если Ваш модуль еще не был загружен, и будет foo только загружаться при необходимости, который может быть нулевыми временами, то общая производительность будет лучше.

2
ответ дан 5 February 2011 в 19:50

Если Ваш локальный пользователь на 100% уверен, что нет никакой программы, сохраняющей файл, открытый на этом диске больше, это sync управляйте для записи данных из буферов (если таковые имеются) к диску. Затем можно отключить карту флэш-памяти с интерфейсом USB. Из ОПИСАНИЯ sync записи любые данные, буферизованные в памяти к диску. Это может включать (но не ограничен), измененные суперблоки, изменил inodes и задержал чтения и записи. Это должно быть реализовано ядром; sync программа действительно только тренируется sync системный вызов.

Ядро сохраняет данные в памяти, чтобы не делать (относительно медленное) чтение с диска и записи. Это улучшает производительность, но если компьютер отказывает, данные могут быть потеряны, или файловая система повреждается в результате. sync команда гарантирует, что все в памяти записано в диск.

Любые аргументы проигнорированы, за исключением одинокого --help или --version (*note Общий options::).

Статус выхода нуля указывает на успех, и ненулевое значение указывает на отказ.

1
ответ дан 5 June 2014 в 10:54

Другие вопросы по тегам:

Похожие вопросы: