0

私は実行Coldfusion8していて、一連のデータベース レコードをループする cfc を持っています。

各レコードには と の 2 つのフィールドが含まれimage pathますimage file。すべての画像のパスを作成し、一時フォルダーにアップロードし、サイズを変更してからS3.

レコードの数によっては、これにかなりの時間がかかる場合があり、大きな画像セットのアップロード サイクルを正常に完了できませんでした (最終的にはタイムアウトになりました)。

すでにタイムアウトのしきい値を に設定しています5000が、それでも十分ではないようです。

S3 にアップロードする前に、チェックするメディア ログを保持しているため、残した場所を拾うことができます。この方法でタスクを完了できますが、この関数を 5 回トリガーして 400 アイテムをアップロードする必要があります。

質問:
(S3 の場合) httptimeoutsomeに設定せずにタイムアウトを回避する方法はありますか50000000? CFTHREADシステムがまだアップロードしている間にユーザーがインポートページを離れた場合、これを実行するのは理にかなっていますか?

いくつかの洞察をありがとう。

4

1 に答える 1

3

CFthread を使用してタスクを実行できますが、必ずスコープをロックしてください。そうしないと、このメモリを集中的に使用するプロセスを数回実行してサーバーを強制終了する可能性があります。非常に集中的な場合は、このプロセスを一度に 1 回だけ実行する必要があります。

ただし、他のオプションがあります。これがアプリケーション ユーザーが実行する必要がなく、1 回限りのプロセスである場合は、非常に長いタイムアウトでスケジュールされたタスクを設定して、サーバーがあまり稼働していないときに夜間に実行できます。高使用。これにより、タイムアウトをアプリケーションとは別に設定できるため、アプリケーションの残りの部分はグローバル タイムアウトの変更の影響を受けません。

別のオプションは、これがユーザーが半定期的に行うものである場合、電子メール、ログ、またはその他の手段 (Ajax または Websockets) を介して通知をプッシュし、タスクが完了したことをユーザーに知らせるスレッドです。これには、スレッド生成時に動的に処理されるデータの量に基づいて計算されたタイムアウトを変更できるという利点があります。ただし、注意を怠ると、大量のデータセットを処理する多くのスレッドでサーバーが過負荷になる可能性があります (さらに、ログ ファイルの読み取り/書き込みロックの管理が難しくなります)。

ただし、これを取り除いて、どの解決策が効果的かを確認し、最終的な解決策を投稿して、他の人が結果を確認できるようにすることをお勧めします.

お役に立てれば。

于 2012-09-26T08:12:45.453 に答える