Действительно ли возможно программно создать стековый фрейм Python и запустить выполнение в произвольной точке в коде?

При использовании Dgraph Bulk Loader вы должны использовать тот же ноль (т. Е. Тот же каталог zw), который вы использовали для массовой загрузки. Dgraph Zero передает аренду UID, используемую для назначения UID во время массовой загрузки, поэтому использование нового Zero приведет к ошибке "[430060] не может быть больше аренды: [10000]".

Я рекомендую следовать документации Dgraph о массовом загрузчике: https://docs.dgraph.io/deploy#bulk-loader .

22
задан Community 23 May 2017 в 12:00
поделиться

4 ответа

Эмигрантская привязка Python, включенная в нормальное распределение Python, создает стековые фреймы programtically. Предупредите, хотя, это полагается на недокументированные и частные API.

http://svn.python.org/view/python/trunk/Modules/pyexpat.c?rev=64048&view=auto

10
ответ дан Johan Dahlin 29 November 2019 в 05:31
поделиться

То, что Вы обычно хотите, продолжения, которые я вижу, уже является тегом по этому вопросу.

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

http://www.ps.uni-sb.de/~duchier/python/continuations.html

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

, Другими словами: сделайте свой собственный, прикладной уровень, стек.

6
ответ дан Dave Stenglein 29 November 2019 в 05:31
поделиться

Вы могли захватить существующий стековый фрейм путем выдачи исключения и отстранения одного кадра вперед в traceback. Проблема нет никакого пути, обеспеченного для возобновления выполнения в середине (кадр f_lasti) блока кода.

“Resumable exceptions” являются действительно интересной идеей языка, хотя это хитро для размышления о разумном способе, которым они могли взаимодействовать с существующим ‘try/finally’ Python и ‘with’ блоками.

В настоящий момент, нормальный способ сделать это состоит в том, чтобы просто использовать потоки для выполнения рабочего процесса в отдельном контексте к его контроллеру. (Или coroutines/greenlets, если Вы не возражаете компилировать их в).

2
ответ дан bobince 29 November 2019 в 05:31
поделиться

Мне нужно решить такую ​​же проблему. Интересно, что решил сделать исходный плакат.

stackless утверждает, что он может мариновать тасклеты, пока нет связанного «загроможденного» стека C (я выбрал формулировку «загроможденный»).

Я, вероятно, буду использовать eventlet и figure из-за какого-то способа консервирования «состояния», я действительно не хочу писать явный конечный автомат ..

1
ответ дан 29 November 2019 в 05:31
поделиться
Другие вопросы по тегам:

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