私はファイルを(本当に速いペースで)特定のディレクトリに書き出しています。私は新しいファイルのディレクトリを監視し、外部スクリプトを実行するプロセスを起動したいと思います。今、私はPython Watchdog spawn multiprocessing
Can't pickle <type 'Struct'>: it's not found as __builtin__.Struct
の(私はパトスを使用していても)酸洗エラーを取得しています私は私は大丈夫である、私がやっているものを再考する必要がありますする可能性があり、酸洗いエラーを修正助けが必要です。ここで
は、私がこれまで持っているものです。
#!/usr/bin/python
import os
import sys
import argparse
import json
import time
import os
from datetime import datetime
#Test for Pathos
from pathos.multiprocessing import ProcessingPool as Pool
from multiprocessing import cpu_count
from subprocess import check_output
import ConfigParser
import logging
#WatchDog
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler, FileSystemMovedEvent
from CodernityDB.database import Database
###
# CONFIGURATION
###
CONFIG GOES HERE BUT REMOVED
###
# Custom handler for Python Watchdog
# When spawned, it will spawn a new worker into the pool
###
class MyHandler(FileSystemEventHandler):
def __init__(self):
self.db = Database("/var/db/test.db")
try:
self.db.open()
except Exception, e:
print str(e)
self.db.create()
def on_created(self, event):
#print event.src_path
try:
pool.map(doIt, (self.db, event.src_path,))
except Exception, e:
print str(e)
def codernityIt(db, json_):
try:
print json_
db.insert(json_)
except Exception, e:
print str(e)
logging.error(str(e))
def doIt(db, file_):
try:
codernityIt(db, json.loads(check_output(['python', '/external/script.py', file_])))
except Exception, e:
print str(e)
logging.error(str(e))
if __name__ == '__main__':
###
# Pool specific Settings
###
pool = Pool(processes=cpu_count())
event_handler = MyHandler()
###
# Watchdog specific settings
###
observer = Observer()
observer.schedule(event_handler, path=watchPath, recursive=True)
observer.start()
###
# This While True loop listens for Keyboard interrupts and will gracefully exit the program if found
###
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.unschedule_all()
observer.stop()
db.close()
#observer.join()
私はpicklingエラーを修正する方法はわかりませんが、ディレクトリを見たい場合は、別のスクリプトを実行して、os.listdir()の出力を繰り返してファイルの変更を確認してください。それはあまり効率的ではありませんが、ユースケースが十分単純な場合は簡単です。 – Ben