@ru_python

Страница 9111 из 9768
Tishka17
22.05.2019
11:46:03
Alex
22.05.2019
11:46:06
root@ubuntu:~/ad-farm# celery -A runner.app worker -n runner --loglevel=DEBUG
заодно добавь print(sys.path) и покажи вывод

тут есть одна интересная бага в celery, возможно это она

Максим
22.05.2019
11:46:28
foo = importlib.import_module("exps." + foobar)

Google
Alex
22.05.2019
11:46:47
Tishka17
22.05.2019
11:46:48
Максим
22.05.2019
11:46:56
потому что оно по другому не работает

скажите мне как по другому и я исправлю

Tishka17
22.05.2019
11:47:18
Просто from exps import foobar?

Максим
22.05.2019
11:47:18
но мои попытки были тщетны

нужно программно

Tishka17
22.05.2019
11:47:43
Я бы ещё инит в exps глянул

Максим
22.05.2019
11:47:53
Tishka17
22.05.2019
11:48:23
Там пусто
У тебя в exps нет foobar, с чего этому коду вообще работать?

Вижу только example

Google
Максим
22.05.2019
11:48:35
foobar="example"

и все

Alex
22.05.2019
11:48:49
извращение какое

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

Максим
22.05.2019
11:49:01
Мне от клиента прилетает файл, в котором есть функция do, которую мне нужно выполнять и получать значение, которое она вернула

Tishka17
22.05.2019
11:49:12
Ух

Alex
22.05.2019
11:49:19
> Мне от клиента прилетает файл, в котором есть функция do, ох пипец

Максим
22.05.2019
11:50:08
Так проще

Просто рискованно
это закрытый проект

который используется в командных нуждах

Alex
22.05.2019
11:50:27
а что не так?
да вообще идея выполнять рандомный код который тебе откуда-то прилетает порочна по-определению

Максим
22.05.2019
11:50:36
А файл в какой папке?
созраняется в exps

Tishka17
22.05.2019
11:50:39
это закрытый проект
Да пожалуйста. Если комп без сети в отдельной комнате, ок

Tishka17
22.05.2019
11:50:52
созраняется в exps
Тогда непонятно что не работает. Показывай ошибку импорта

Google
Максим
22.05.2019
11:51:10
потому что скорее всего он будет написан мной и моими друзьями

Подписи?
нет, потому что у юзеров нет намерения что-то сломать

Alex
22.05.2019
11:51:30
кстати а ты случайно не грузишь все эти файлы под одним и тем же именем?

хохмы ради

Максим
22.05.2019
11:51:44
там есть один example

я на нем проверю

Tishka17
22.05.2019
11:52:04
Ладно. Я все ещё не вижу, почему импорт может сломаться

Alex
22.05.2019
11:52:19
Ладно. Я все ещё не вижу, почему импорт может сломаться
я тоже... но с учетом градуса неадеквата может быть все что угодно

я бы хотел посмотреть минимальный код воспроизводящий проблему

Tishka17
22.05.2019
11:52:53
я тоже... но с учетом градуса неадеквата может быть все что угодно
Ну теоретически, почему не разрешить юзера грузить свой код в определенных ситуациях.

Может он свой хадуп делает

Alex
22.05.2019
11:53:20
вообще импортировать прилетающие модули через importlib.import_module хреновое решение по-определению

ибо либо он столкнется с необходимостью делать reload одноименных модулей, либо у него будет раздуваться sys.modules.

Максим
22.05.2019
11:53:48
Alex
22.05.2019
11:54:38
что в моих словах было неадекватного?
то что ты пытаешься импортировать код для одноразового выполнения через стандартную систему импорта, не понимая как она работает.

Максим
22.05.2019
11:55:22
Хорошо, как лучше это сделать?

Tishka17
22.05.2019
11:57:34
Но хз

Пусть импортирует

Google
Alex
22.05.2019
11:58:12
Вообще, я бы такое лучше отдельными процессами запускал
так тоже можно и наверное самое безопасное и правильное решение

Максим
22.05.2019
11:58:44
Тогда непонятно что не работает. Показывай ошибку импорта
[2019-05-22 16:58:10,452: ERROR/ForkPoolWorker-2] Task runner.run_single[835cb23d-5b32-424f-8f77-c94e5763de1b] raised unexpected: ModuleNotFoundError("No module named 'exps'",) Traceback (most recent call last): File "/usr/local/lib/python3.6/dist-packages/celery/app/trace.py", line 382, in trace_task R = retval = fun(*args, **kwargs) File "/usr/local/lib/python3.6/dist-packages/celery/app/trace.py", line 641, in __protected_call__ return self.run(*args, **kwargs) File "/root/ad-farm/runner.py", line 26, in run_single exp = importlib.import_module("exps." + foobar) File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked ModuleNotFoundError: No module named 'exps'

Admin
ERROR: S client not available

Alex
22.05.2019
11:59:50
1. быстрое но не самое корректное решение - каждый раз ипользовать reload() 2. более правильное решение загружать код и создавать модуль динамически в обход системы импорта 3. как тишка сказал вынести это все нафиг в subprocess.

Максим
22.05.2019
12:00:00
Tishka17
22.05.2019
12:00:22
зачем люди юзают celery я вообще не знаю

Максим
22.05.2019
12:00:26
потому что процессы запускаются в daemon

Pavel
22.05.2019
12:01:23
зачем люди юзают celery я вообще не знаю
люди вообще делают много странных вещей. и использование селери - еще не предел совершенства

Потому что это удобно
это как минимум дискуссионный вопрос

Максим
22.05.2019
12:01:58
зачем люди юзают celery я вообще не знаю
чтоб решать поставленные задачи

зачем использовать машину, когда есть ноги?

Tishka17
22.05.2019
12:05:06
[2019-05-22 16:58:10,452: ERROR/ForkPoolWorker-2] Task runner.run_single[835cb23d-5b32-424f-8f77-c94e5763de1b] raised unexpected: ModuleNotFoundError("No module named 'exps'",) Traceback (most recent call last): File "/usr/local/lib/python3.6/dist-packages/celery/app/trace.py", line 382, in trace_task R = retval = fun(*args, **kwargs) File "/usr/local/lib/python3.6/dist-packages/celery/app/trace.py", line 641, in __protected_call__ return self.run(*args, **kwargs) File "/root/ad-farm/runner.py", line 26, in run_single exp = importlib.import_module("exps." + foobar) File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked ModuleNotFoundError: No module named 'exps'
мда, ладно. выглядит как баг-фича в celery на который они забили https://github.com/celery/celery/issues/3150 https://github.com/celery/celery/issues/3441 Есть вот такое: celery.utils.imports.cwd_in_path() https://docs.celeryproject.org/en/latest/internals/reference/celery.utils.imports.html#celery.utils.imports.cwd_in_path

Tishka17
22.05.2019
12:05:44
зачем использовать машину, когда есть ноги?
Эм, зачем возить машину в машине, когда можно просто ездить на машине

да это тот баг о котором я говорил, но не был уверен без детального изучения кода ТС.
на этот баг есть функция, его исправляющая. Хз вообще что ониимели ввиду

Максим
22.05.2019
12:08:17
меня ещё в celery привлекает status_update и on_message

если такая альтернатива есть в multiprocessing то я с удовольствием буду использовать его

хотя помоему gunicorn тоже не очень любит multiprocessing

Tishka17
22.05.2019
12:10:01
ну я про celery vs руками читать из очереди

Google
Максим
22.05.2019
12:11:08
если бы можно было руками читать из очереди то я бы так и сделал наверное

Tishka17
22.05.2019
12:12:54
а почему нельзя?

Максим
22.05.2019
12:16:23
а почему нельзя?
хммм, может и можно

когда описываешь кому то архитектуру сам понимаешь, что можно его улучшить

Но про импорты вопрос открыт

как мне лучше исполнять код не через multiprocessing

Alex
22.05.2019
12:17:25
я не берусь сейчас обсуждать проблемы с multiprocessing в celery, нужно посмотреть что там но вот написать свой скрипт враппер который будет выполнять код и выдавать результат и запускать через subprocess что мешает то?

Tishka17
22.05.2019
12:20:29
Но про импорты вопрос открыт
вопрос про импорты - судя по всему особенность селери.

I
22.05.2019
12:27:29
Ну хорошо, я понимаю почему добавлять что-то в sys.path, это плохо... Само занятие этим выглядит как-то грубо Помогите пожалуйста задать себе правильный взгляд на то как держать свою архитекутру Если бы у меня был простой проект, который бы запускался из одной дирекотрии, здесь было бы всё довольно просто - никаких sys.path не прописываем, зависимости вызываем относительно рабочей директории (например import src.service.database, import src.models.user) Но у меня проект запускается из разных мест (я только новичек в Python и некоторые знания для меня закрыты)... Поясню что я имею под этим ввиду, на своём практическом примере: У меня Python занимается сервисом-платформой протокола WAMP - crossbar.io и запускается с помощью команды crossbar start и рабочая директория, это не то откуда вызывалась команда, а директория с настройками этой платформы, т.е. файловая структура имеет такой вид ./ ./.crossbar/ ./.crossbar/config.json ./src/ ./src/services/ ./src/services/... ./src/services/... ./src/models/ ./src/models/... ./src/models/... ./tests/ ./tests/... ./tests/... и рабочей директорией становится ./.crossbar/ (это первое место запуска кода) С другой стороны код запускается из тестов, которые я запускаю из корневой директории pytest --rootdir=./tests/, и рабочая директория становится - корневая директория Получается, что пути к зависимостями меняются от откружения Я вижу, что проблемой является платформа (а если хорошо подумать, то это где-то я допускаю ошибку) и не правельный подход к ней Подскажите пожалуйста как организовать архитектуру так, чтобы зависимости имели одинаковые пути и для платформы и для тестов?

Tishka17
22.05.2019
12:31:14
Ну хорошо, я понимаю почему добавлять что-то в sys.path, это плохо... Само занятие этим выглядит как-то грубо Помогите пожалуйста задать себе правильный взгляд на то как держать свою архитекутру Если бы у меня был простой проект, который бы запускался из одной дирекотрии, здесь было бы всё довольно просто - никаких sys.path не прописываем, зависимости вызываем относительно рабочей директории (например import src.service.database, import src.models.user) Но у меня проект запускается из разных мест (я только новичек в Python и некоторые знания для меня закрыты)... Поясню что я имею под этим ввиду, на своём практическом примере: У меня Python занимается сервисом-платформой протокола WAMP - crossbar.io и запускается с помощью команды crossbar start и рабочая директория, это не то откуда вызывалась команда, а директория с настройками этой платформы, т.е. файловая структура имеет такой вид ./ ./.crossbar/ ./.crossbar/config.json ./src/ ./src/services/ ./src/services/... ./src/services/... ./src/models/ ./src/models/... ./src/models/... ./tests/ ./tests/... ./tests/... и рабочей директорией становится ./.crossbar/ (это первое место запуска кода) С другой стороны код запускается из тестов, которые я запускаю из корневой директории pytest --rootdir=./tests/, и рабочая директория становится - корневая директория Получается, что пути к зависимостями меняются от откружения Я вижу, что проблемой является платформа (а если хорошо подумать, то это где-то я допускаю ошибку) и не правельный подход к ней Подскажите пожалуйста как организовать архитектуру так, чтобы зависимости имели одинаковые пути и для платформы и для тестов?
Почему у тебя проект запускается из разных мест? Хз что такое кросс бар

Страница 9111 из 9768