Найти - Пользователи
Полная версия: multiprocessing + pygtk + urllib2 opener
Начало » Python для новичков » multiprocessing + pygtk + urllib2 opener
1 2
Soteric
Локальные переменные живут только в пределах выполнения метода. Значит при каждом вызове будет создаваться новый лок. Значит для каждого потока он будет своим.
Shaman
Спасибо! Протестировал, разобрался.
nowayout
А если есть какой-нибудь массив, словарь, что-то еще, что мне нужно только читать. Не удалять элементы, заменять там что-то, а только обращаться по индексу/ключу, то нужно эти массивы/словари как-то специально расшаривать для всех процессов или это надо делать только для того, куда каким-то образом идет запись: stdout/файл/etc ?
lorien
Хотелось бы еще узнать насчет записи в бд. Если я буду использовать mongodb, то как правильно с нескольких процессов писать в одну базу ? Для записи в обычный текстовый файл я сделал так:
Если вы будете сохранять разные объекты, то никаких локов не нужно. Если вы будете из разных процессов сохранять с помощью операции save (http://docs.mongodb.org/manual/reference/method/db.collection.save/) один и тот же объект, значит у вас неправильная логика приложения. Когда вам нужно работать из разных потоков с одним объектом, вам нужно использовать операцию update (http://docs.mongodb.org/manual/core/update/). Никаких локов не нужно. Под объектом выше я подразумеваю какой-то конкретный объект конкретной коллекции mongodb.

, то нужно эти массивы/словари как-то специально расшаривать для всех процессов
В питоне обычно употребляется термин список (list), а не массив. Ещё есть кортежи (tuple), опять же не массивы. Не очень понял, что вы спрашивали, но если у вас есть нечто доступное для чтения из разных процессов и вы это нечто специально не “расшаривали”, скорее всего и не нужно его “расшаривать”.
nowayout
lorien
обычно употребляется термин список (list), а не массив. Ещё есть кортежи (tuple
Знаю-знаю. Ну, например есть у меня список asdasd = С элементами типа string. В каждом процессе (их, к примеру, 20 штук) у меня отправляются get-запросы на разные страницы и там (на странице) проверяется наличие элементов из списка asdasd. Вопрос: можно ли просто это сделать как
...
for x in asdasd:
    if x in res:
        pass
...
lorien
скорее всего и не нужно его “расшаривать”.
Ну вот я так же думаю, хотч не до конца в этом уверен.

lorien
нужно использовать операцию update
Я немного почитал доки и мне кажется, что мне нужен insert. Я хотел вот что узнать: мне для каждого процесса нужно делать
client = MongoClient()
db = client.database
или все это делать заранее и передавать потом это в качестве аргументов
p = Process(target=func, args=(db))
? Простите, если неясно выражаюсь
lorien
Если честно, мне не понятна природа ваших вопросов. Я уже давно программирую и привык решать вопросы по мере их возникновения. У вас есть какая-то проблема, напишите код для её решения. Потом покажите его, вам посоветуют что-нибудь исправить. Можно бесконечно задавать вопросы, ни написал ни строчки кода.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB