ブログ

割とコンピュータよりの情報をお届けします。

2018年3月14日

Pythonで一定間隔で実行

Pythonで一定間隔で実行することが難しい。JavaScriptではsetInterval()が使えるのだが,Pythonは標準で用意されていないよう

Pythonで一定間隔であるコードを実行する方法を知べていたがなかなか見つからない。
標準ではないのかもしれない。微妙にこれでいいのか不安。

(今更気付いたがPythonの関数内では関数の外の変数も読めてしまうのですね)

 

import threading
import time
import sys

threadStop = False;
count = 0;
def run():
    global count, threadStop;
    count += 1;
    if threadStop != True:
        thread = threading.Timer(1, run)
        thread.start()
        print('run {0}'.format(count));
    else:
        threadStop = False;
    
    

thread = threading.Thread(target=run);
thread.start();

try:
    while (True):
        time.sleep(1);
    
except KeyboardInterrupt:
    threadStop = True;
    while threadStop == False:
        time.sleep(0.01);
    sys.exit();

(2018/08/25追記: .NETの支援があれば別の方法も使える)

≫ 続きを読む

2018/03/14 コンピュータ   TakeMe
タグ:Python

PythonとJavaScriptの時刻やり取り

PythonとJavaScriptのDateのやり取りで困ったことを書いてみる。

PythonのdatetimeとJavaScriptのDateのやり取りにかなり苦労した。

最終的に以下のようなコードができた。
うまくいっているのかがよくわからない。
なかなか思ったような処理にならない。難しい。最後はtzlocalモジュールを使用してつじつま合わせをしている。

from datetime import datetime, timedelta, timezone
from tzlocal import get_localzone
import pytz
import time

#tstr = '2016-11-29T10:00:30Z'

def fromtstr(tstr):
    try:
        tdatetime = datetime.strptime(tstr, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=timezone.utc);
    except:
        tdatetime = datetime.strptime(tstr, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc);
    return tdatetime;

def valueOf(datetime):
    return int(time.mktime(datetime.timetuple())*1e3 + datetime.microsecond/1e3);

def fromValue(value):
    tz = get_localzone() # local timezone 
    d = datetime.now(tz) # or some other local date 
    utc_offset = d.utcoffset().total_seconds()
    epoch = datetime(1970, 1, 1).replace(tzinfo=timezone.utc)
    val = epoch + timedelta(milliseconds=value+utc_offset*1000)
    return val;

 

≫ 続きを読む

2018/03/14 コンピュータ   TakeMe