@ru_python

Страница 2427 из 9768
Octo@dshacks
06.03.2017
16:40:22
ты все не так сделал, если у тебя вызов api.receiveAPI() что-то кэширует - это плохо, не надо так делать
def receiveAPI(): return jsonparse(getResponse('api')) def getResponse(command): ASF = str( check_output(asfcommand % (command), shell=True), 'utf-8').split('\n') commandout = ASF[5] return commandout

Роман
06.03.2017
16:40:48
или *барабанная дробь* использовать aiohttp
с тредами ему проще разобраться будет, если не работал до этого c asyncio

Марк
06.03.2017
16:40:54
https://falconframework.org/

Кто-то юзал этот фреймворк?

Google
Марк
06.03.2017
16:41:17
Нормальная тема для всяких бекендовых апи?

Nikolay
06.03.2017
16:41:46
с тредами ему проще разобраться будет, если не работал до этого c asyncio
если с тредами тоже не работал до этого - примерно одинаково

Octo@dshacks
06.03.2017
16:42:03
Ну у меня был ThreadedHTTPServer

Nikolay
06.03.2017
16:42:13
Ну у меня был ThreadedHTTPServer
это тут вообще ни при чем

Роман
06.03.2017
16:42:21
если с тредами тоже не работал до этого - примерно одинаково
тоже может быть, мне просто проще было это на тредах сделать в свое время

Nikolay
06.03.2017
16:42:41
короче

ты во внешнем бесконечном цикле хочешь вызывать подпроцесс, и иметь возможность читать его результаты текущие из веб-API, все верно?

Octo@dshacks
06.03.2017
16:44:10
не веб-API

запрос к программе

Nikolay
06.03.2017
16:44:36
у тебя вебсервер

Octo@dshacks
06.03.2017
16:44:39
Lf

да

Nikolay
06.03.2017
16:44:46
значит, вебапи

Google
Nikolay
06.03.2017
16:45:13
так вот, у тебя три варианта - либо треды (где будут рейс кондишны и нужны будут мьютексы), либо внешний процесс и очередь/база, либо aiohttp и ничего этого не надо

Octo@dshacks
06.03.2017
16:45:13
ну откуда я данные беру - то не веб

Nikolay
06.03.2017
16:45:30
ты сам пишешь вебапи, откуда ты их берешь - неважно

Octo@dshacks
06.03.2017
16:45:43
Ясно, сейчас буду курить aiohttp

Nikolay
06.03.2017
16:47:57
в aiohttp у тебя будет один основной луп, в котором крутится веб-приложуха, и параллельно, так же, как выше обсуждали, ты туда можешь с помощью loop.create_task() засунуть запускалку внешнего процесса асинхронную

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

только процесс внешний надо будет запускать, разумеется, не через subprocess

а через https://docs.python.org/3/library/asyncio-subprocess.html

Nikolay
06.03.2017
16:57:20
можно пример?
ну, у тебя будет объект приложения, примерно как во Flask: app = web.Application()

у него есть app.loop

то есть ты в функции, где будешь дергать запуск: web.run_app(app, host=host, port=port) сначала сделай что-то типа app.loop.create_task(coroutine_with_loop_call_to_external_process)

Octo@dshacks
06.03.2017
17:04:45
то есть ты в функции, где будешь дергать запуск: web.run_app(app, host=host, port=port) сначала сделай что-то типа app.loop.create_task(coroutine_with_loop_call_to_external_process)
Так, я запутался. Вот как выглядит функция: @asyncio.coroutine def cacheupd(): print("Updating ASF cache") ASF = api.receiveAPI() infofetched = strftime("%b %d %Y %H:%M:%S") sleep(5) app.loop.create_task(cacheupd)

Octo@dshacks
06.03.2017
17:05:05
3.5

Nikolay
06.03.2017
17:05:29
тогда не надо @asyncio.coroutine, пиши сразу await def cacheupd():

и внутри нее делай бесконечный луп, как Ктулхуз выше делал

Nikolay
06.03.2017
17:06:50
все там норм, IDE у тебя не умеет в питон 3.5+

Octo@dshacks
06.03.2017
17:06:55
Ясно

Google
Octo@dshacks
06.03.2017
17:07:09


Nikolay
06.03.2017
17:08:56
хммм, ща

Nikolay
06.03.2017
17:11:13
и? у тебя же 3.5?

Octo@dshacks
06.03.2017
17:11:22
а точно



Nikolay
06.03.2017
17:12:00
так async же

а не await

сорян, я неправильно написал

Octo@dshacks
06.03.2017
17:12:30
заменил

YaOurTea
06.03.2017
17:12:33
О, Привет :)

Octo@dshacks
06.03.2017
17:12:39


Ну так что не так тут, @Enchantner?

Nikolay
06.03.2017
17:14:44
Ну так что не так тут, @Enchantner?
погоди минутку, сейчас пытаюсь сам пример накидать

YaOurTea
06.03.2017
17:21:27
Есть у джанге вот такая форма <form method="POST" action="/manage/games/add_game/"> {% csrf_token %} <button class="btn btn-success"> <i class="glyphicon glyphicon-plus"></i> Добавить игру </button> </form> По нажатию на кнопку сразу срабатывает редирект из view def add_game(request): args = {} args.update(csrf(request)) if request.POST: form = AddGameForm(request.POST) if form.is_valid(): doctor_ins = form.save(commit=False) if Game.objects.filter(game_id=doctor_ins.game_id): raise forms.ValidationError("Ну тут я накосячил, ладно") doctor_ins.save() return redirect('/manage/games/') else: form = AddGameForm() args['form'] = form args['username'] = auth.get_user(request).username return render_to_response('add_game.html', args)

Nikolay
06.03.2017
17:22:04
Ну так что не так тут, @Enchantner?
вот тебе пример рабочий http://pastebin.com/74MTTYFS

Rocket
06.03.2017
17:22:22
@Enchantner ты негодяй!

Nikolay
06.03.2017
17:22:28
Google
Rocket
06.03.2017
17:22:46
Я сегодня целый день думаю про асинхронные, мать их, генераторы!

Nikolay
06.03.2017
17:23:00
YaOurTea
06.03.2017
17:23:09
А если напрямую перейти по ссылке http://localhost:8080/manage/games/add_game/ то нормально переходит на форму.... Что не так, можете подсказать?

Octo@dshacks
06.03.2017
17:23:50
Nikolay
06.03.2017
17:23:55
вопрос - чего ты хочешь добиться?

а "date" это что?
это внешняя команда, которую я дергаю

Rocket
06.03.2017
17:24:15
ну, тебе же понравилось, признайся
Двк да. Теперь руки чешутся сделать ctx.wait_next_query()

YaOurTea
06.03.2017
17:24:34
ты сейчас прямо описал то же, что у тебя написано в коде
В том-то и дело, что он не открывает форму по нажатию, а сразу на редирект и в базу заполняется None

Octo@dshacks
06.03.2017
17:24:37
это внешняя команда, которую я дергаю
а, то есть надо сделать еще один скрипт

Admin
ERROR: S client not available

Octo@dshacks
06.03.2017
17:25:01
Точнее вынести в файл

Nikolay
06.03.2017
17:25:04
а, то есть надо сделать еще один скрипт
нет, ты у себя в коде же дергаешь какой-то внешний процесс?

вот это он и есть

я про asfcommand % (command)

53r63rn4r
06.03.2017
17:25:27
{ "curtime": "b'\\xd0\\x9f\\xd0\\xbd\\xd0\\xb4 \\xd0\\x9c\\xd0\\xb0\\xd1\\x80 6 19:24:50 EET 2017\\n'" }

Rocket
06.03.2017
17:25:49
Так вот, я уперся в одну проблему...

Pavel
06.03.2017
17:26:01
В том-то и дело, что он не открывает форму по нажатию, а сразу на редирект и в базу заполняется None
Давайте почитаем мануал. Therefore, you shouldn’t use if request.POST to check for use of the POST method; instead, use if request.method == "POST" (see above).

Nikolay
06.03.2017
17:26:06
Google
Pavel
06.03.2017
17:26:12
https://docs.djangoproject.com/en/1.10/ref/request-response/#django.http.HttpRequest.POST

Octo@dshacks
06.03.2017
17:26:23
Nikolay
06.03.2017
17:26:38
не, я запускаю из свой библиотеки код
у тебя check_call() там, что ты мне рассказываешь

Nikolay
06.03.2017
17:26:41
ты сам код постил

Pavel
06.03.2017
17:27:43
Не понял.... Можете пояснить?
Therefore, you shouldn’t use if request.POST to check for use of the POST method; instead, use if request.method == "POST" (see above). Таким образом, вы не должны использовать if request.POST для проверки, используется ли метод POST. Вместо этого, используйте if request.method == "POST"

53r63rn4r
06.03.2017
17:27:46
{ "curtime": "Пнд Мар 6 19:27:32 EET 2017\n" }

Nikolay
06.03.2017
17:27:58
Rocket
06.03.2017
17:28:07
Для реализации всего этого веселья не хватает только асинхронного генератора, но появляется некий сайд-эффект. Мне придется в userstate хранить итератор. А итераторы ведь не пиклятся(так ведь?). И как мне тогда state сохранить при перезагрузке?

Pavel
06.03.2017
17:28:09
53r63rn4r
06.03.2017
17:28:11
Но асинхронщину я так и не понял..

YaOurTea
06.03.2017
17:28:28
как поправил?
def add_game(request): args = {} args.update(csrf(request)) if request.method == "POST": form = AddGameForm(request.POST) if form.is_valid(): doctor_ins = form.save(commit=False) if Game.objects.filter(game_id=doctor_ins.game_id): raise forms.ValidationError("Ну тут я накосячил, ладно") doctor_ins.save() return redirect('/manage/games/') else: form = AddGameForm() args['form'] = form args['username'] = auth.get_user(request).username return render_to_response('add_game.html', args)

53r63rn4r
06.03.2017
17:28:28
Точнее, тут не увидел

Nikolay
06.03.2017
17:28:29
53r63rn4r
06.03.2017
17:28:56
Ну, может было бы понятнее на записи в файл, например разных данных

Хз

53r63rn4r
06.03.2017
17:29:22
Типа фор разбирает по порядку, а асинк/авейт разбирает кто успел тот и написал?

Nikolay
06.03.2017
17:29:25
внешний стейт ты можешь хранить в чем угодно, и передавать в код при запуске

как ты это будешь делать - это уже другой вопрос)

Rocket
06.03.2017
17:30:00
Вопрос вопросов.

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