これについて議論するいくつかの質問がありましたが、私が持つ制約のセットはありません。誰かが良いアイデアを持ってくるかもしれません。Pythonのタイムアウト制御されていないオーバーライドされた関数
基本的に私はセットアップするためにPython関数のタイムアウトを以下の制約の下で必要:
クロスプラットフォーム(すなわち無signal.ALARM)
ないのPython 3(私ができますPython> = 2.7.9と仮定)
関数だけがタイムアウトする必要があります。プログラム全体を終了することはできません。
私は、呼び出された関数を全く制御できません。つまり、派生クラスとオーバーライドを使用して抽象インターフェイスを使用するコールバックです。他の人はこれらのコールバック関数を書いていて、彼らはばかだと仮定しています。
例コード:
class AbstractInterface(Object):
def Callback(self):
# This will be overridden by derived classes.
# Assume the implementation cannot be controlled or modified.
pass
...
def RunCallbacks(listofcallbacks):
# This is function I can control and modify
for cb in listofcallbacks:
# The following call should not be allowed to execute
# for more than X seconds. If it does, the callback should
# be terminated but not the entire iteration
cb.Callback()
任意のアイデアを大幅に理解されるであろう。
>あなたは「ばか」と思う人のコードを実際には実行しないでください。 これは実際には可能ではありません。私は、他の人がビルドするためのAPIを提供するフレームワークを作成しています。プラグインプラットフォームを使ってソフトウェアを書くのと同じです。プラグインを書く人が誰なのかわからないので、コーディング方法がわからないと思います。 とにかく - 私はforkについて考えました。プロセスのオーバーヘッドとPOSIX/Windowsの違い以外の主な問題は、複雑なIPCを使う必要があることです(私のコードで "self"ポインタ使用されている)。 – Dan