42 lines
874 B
Python
42 lines
874 B
Python
# cofollow.py
|
|
import os
|
|
import time
|
|
import csv
|
|
|
|
def follow(filename,target):
|
|
with open(filename,"r") as f:
|
|
f.seek(0,os.SEEK_END)
|
|
while True:
|
|
line = f.readline()
|
|
if line != '':
|
|
target.send(line)
|
|
else:
|
|
time.sleep(0.1)
|
|
|
|
def receive(expected_type):
|
|
msg = yield
|
|
assert isinstance(msg, expected_type), 'Expected type %s' % (expected_type)
|
|
return msg
|
|
|
|
# Decorator for coroutines
|
|
from functools import wraps
|
|
|
|
def consumer(func):
|
|
@wraps(func)
|
|
def start(*args,**kwargs):
|
|
f = func(*args,**kwargs)
|
|
f.send(None)
|
|
return f
|
|
return start
|
|
|
|
# Sample coroutine
|
|
@consumer
|
|
def printer():
|
|
while True:
|
|
item = yield from receive(object)
|
|
print(item)
|
|
|
|
# Example use.
|
|
if __name__ == '__main__':
|
|
follow('../../Data/stocklog.csv', printer())
|