
Octo@dshacks
06.03.2017
16:40:22

Роман
06.03.2017
16:40:48

Марк
06.03.2017
16:40:54
https://falconframework.org/
Кто-то юзал этот фреймворк?

Google

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

Nikolay
06.03.2017
16:41:46

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

Nikolay
06.03.2017
16:42:13

Роман
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

Octo@dshacks
06.03.2017
16:55:26

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

Nikolay
06.03.2017
17:05:02

Octo@dshacks
06.03.2017
17:05:05
3.5

Nikolay
06.03.2017
17:05:29
тогда не надо @asyncio.coroutine, пиши сразу await def cacheupd():
и внутри нее делай бесконечный луп, как Ктулхуз выше делал

Octo@dshacks
06.03.2017
17:06:30

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
хммм, ща

Octo@dshacks
06.03.2017
17:10:53

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

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

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/
то нормально переходит на форму....
Что не так, можете подсказать?

Nikolay
06.03.2017
17:23:48

Octo@dshacks
06.03.2017
17:23:50

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

Rocket
06.03.2017
17:24:15

YaOurTea
06.03.2017
17:24:34

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
Так вот, я уперся в одну проблему...

Nikolay
06.03.2017
17:25:50

Pavel
06.03.2017
17:26:01

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

YaOurTea
06.03.2017
17:26:41

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

YaOurTea
06.03.2017
17:28:00

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
Ну, может было бы понятнее на записи в файл, например разных данных
Хз

Nikolay
06.03.2017
17:29:10

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

Pavel
06.03.2017
17:29:24

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

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