Skip to content

Instantly share code, notes, and snippets.

@kjunichi
Last active November 13, 2015 04:46
Show Gist options
  • Save kjunichi/71839b5811f4f8535aeb to your computer and use it in GitHub Desktop.
Save kjunichi/71839b5811f4f8535aeb to your computer and use it in GitHub Desktop.
Pythonで動くtrusterd ~ まだhttp1で消耗してんの ~

参考資料

PythonのThread処理は以下の記事を参考にしました。

Linuxだともしかすると、nghttpのビルドで--disable-threadsしないと不幸が起こるかもしれない。。。

OSXではそもそもnghttp2ライブラリがマルチスレッドで動かせないとのことなので、この辺りの心配は少なそう。

なんでスレッドで動かすのか

ソケットの待受けでブロックされるから、その処理をBlenderとは別スレッドで動かすことで、Blenderの 操作をしつつhttp2出来る。

動画

動かしてるところが見えます。

俺も動かそうという方は、以下をご覧になるか、joinの部分を削除してBlenderで動かしてください。

Special thanks

今回Blenderで動かすにあたり、OSXでtrusterdを動かすそうとツイートしたら、速攻でOSX対応して下さいました。ありがとうございます。

ステマ

オレオレ証明書の作り方

import threading
from queue import Queue
import time
from ctypes import *
class MrubyPyError(Exception):
pass
class MrubyPy:
c_spam_module = CDLL('./sapm.dylib')
c_spam_hello_func_type = CFUNCTYPE(c_int, c_char_p)
c_spam_hello_func = cast(c_spam_module.spam_hello, c_spam_hello_func_type)
@classmethod
def hello(cls, name):
if name == None or not isinstance(name, str):
raise MrubyPyError('invalid argument')
ret = cls.c_spam_hello_func(create_string_buffer(name.encode('UTF-8')))
print ('c_spam_hello_func returned:', ret)
lock = threading.Lock()
def do_work_for_big_task(item):
# ここで時間のかかる処理を行う(今回は一秒処理のかかるタスクを行うものと仮定してコンピュータにスリープさせる
)
# time.sleep(1)
f = open("trusterd/conf/trusterd.conf.rb","r",encoding="UTF-8")
ruby=f.read()
print(ruby)
MrubyPy.hello(ruby)
with lock:
print(threading.current_thread().name,item)
def worker():
while True:
item = q.get()
do_work_for_big_task(item)
q.task_done()
# キューを作成する
q = Queue()
#スレッド数: 4
for i in range(1):
t = threading.Thread(target=worker)
t.daemon = True
t.start()
start = time.perf_counter()
# 処理しなければいけないタスクの数:30
for item in range(1):
q.put(item)
# すべてのタスクが終了するまで待つ
q.join()
#処理が終了してから、実行にかかった事項が表示される
print('time:',time.perf_counter() - start)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment