হ্যা এটা সম্ভব...
এবং সত্যি কথা বলতে, এটি করা প্রায়শই খুব গুরুত্বপূর্ণ ... ডাব্লুপি সময়সূচী কখনও কখনও সমস্যার সৃষ্টি করে, যখন ক্রোন টাস্ক দীর্ঘ হয় ...
তাহলে আমি কীভাবে এই সমস্যার সমাধান করব?
আমি সেমফোরগুলি প্রয়োগ করতে ট্রান্সিয়েন্টস এপিআই ...
কোডটি এখানে:
if ( ! wp_next_scheduled( 'my_task_hook' ) ) {
wp_schedule_event( time(), 'hourly', 'my_task_hook' );
}
add_action( 'my_task_hook', 'my_task_function' );
function my_task_function() {
// if some other my_task is already running, stop
if ( get_transient( 'my_task_function_semaphore' ) ) return;
// set semaphore for 5 minutes
set_transient( 'my_task_function_semaphore', true, 5*60 );
// DO YOUR STUFF
delete_transient( 'my_task_function_semaphore' );
}
আমি কেন এই ক্ষেত্রে স্থানান্তর ব্যবহার করব? কারণ:
- তারা ডব্লিউপি এর অংশ।
- এগুলি ব্যবহার করা সহজ এবং দক্ষ।
- তারা অচলাবস্থা সৃষ্টি করবে না। আসুন আমরা বলি যে আমার ক্রোন টাস্কটি মারা যেতে পারে (কিছু ত্রুটি ঘটতে পারে, বা এটি খুব দীর্ঘকাল চলে এবং মারা যায়, ইত্যাদি)। এই ক্ষেত্রে এটি সেমফোর মুছে ফেলবে না, সুতরাং ভবিষ্যতের সমস্ত কাজ কার্যকর হবে না। স্থানান্তরকারীদের ব্যবহার করা এই সমস্যার সমাধান করে, কারণ কিছু সময়ের পরে ক্ষণস্থায়ী মুছে ফেলা হবে।
এবং যদি সেখানে অনেকগুলি বিভিন্ন কাজ করতে হয়?
সুতরাং আসুন আমরা অনেক আলাদা ক্রোন টাস্ক আছে যেগুলি একই সময়ে কখনই চলবে না, তবে আমরা এখনও চাই যে সেগুলি সমস্ত চালানো ...
যদি আমরা সমাধানটি semaphore এর সাথে ব্যবহার করি এবং এই সমস্ত কাজের জন্য কেবলমাত্র একটি semaphore ব্যবহার করি, তবে তাদের মধ্যে কিছু কখনও চলতে পারে না। তাহলে কি করব?
সেক্ষেত্রে আপনার চিন্তাভাবনা পরিবর্তন করা উচিত। আপনার কিছু স্বাধীন কাজ নেই, তবে করণীয় কাজগুলির একটি সারি। সুতরাং আপনার এটিকে এভাবে বাস্তবায়ন করা উচিত।
তাই:
- আপনি কিছু প্রকার সারি যুক্ত করেন (আপনি কোনও অ্যারে ব্যবহার করতে পারেন এবং এটি বিকল্প হিসাবে সংরক্ষণ করতে পারেন বা একটি কাস্টম ডিবি টেবিল যুক্ত করতে পারেন)।
- আপনি ক্রুতে কার্যগুলি যুক্ত করতে আপনার ডাব্লুপি ক্রোন প্রতি ঘন্টা ইভেন্ট ব্যবহার করেন।
- আপনি দ্বিতীয় ডাব্লুপি ক্রোন ক্রিয়াকলাপগুলি যুক্ত করুন যা প্রায়শই চলে এবং এটি একের পর এক সারিতে ক্রিয়াকলাপগুলি "খায়"। এই মুহুর্তে কেবলমাত্র একটি কাজ চালিত হয় তা নিশ্চিত করতে এই "খাওয়ার" টাস্কটি সেমফোর ব্যবহার করা উচিত।