أنت تعمل على برنامج Python الذي يعالج البيانات المتعلقة بمجلس الشيوخ ويسجل أي استثناءات تحدث أثناء التنفيذ. بالإضافة إلى ذلك، تريد حفظ البيانات من مجلس الشيوخ في ملف CSV وتسجيل الإنهاء الناجح للبرنامج.

لقد تم تزويدك بمقتطف التعليمات البرمجية الذي يوضح كيفية التعامل مع الاستثناءات، وإنشاء DataFrame من بيانات مجلس الشيوخ، وحفظ DataFrame في ملف CSV، وتسجيل الإنهاء الناجح للبرنامج.

مهمتك هي إكمال البرنامج عن طريق تنفيذ الكود المفقود في وظيفة "process_data". تأخذ هذه الوظيفة معلمتين: `senate` (قائمة من القواميس، حيث يمثل كل قاموس أحد أعضاء مجلس الشيوخ) و`logfile` (سلسلة تمثل المسار إلى ملف السجل).

يتعين عليك تنفيذ الخطوات التالية في وظيفة "بيانات_العملية":

1. قم بإنشاء كتلة محاولة باستثناء للتعامل مع أي استثناءات تحدث أثناء التنفيذ. في كتلة الاستثناء، قم بتسجيل الاستثناء باستخدام وظيفة `logging.exception()`، مع الرسالة "فشل عالمي".

2. استخدم الدالة `pd.DataFrame()` من مكتبة الباندا لإنشاء DataFrame من بيانات `senate`. قم بتعيين DataFrame الناتج إلى المتغير `df`.

3. استخدم الأسلوب `to_csv()` الخاص بـ DataFrame `df` لحفظ البيانات في ملف CSV يسمى "senate.csv".

4. استخدم الدالة `logging.info()` لتسجيل الرسالة "تم خروج البرنامج".

يرجى ملاحظة أنك لا تحتاج إلى كتابة البرنامج بأكمله، فقط الرمز المفقود في وظيفة "بيانات_العملية".

اكتب وظيفة "بيانات_العملية" وفقًا للمتطلبات المذكورة أعلاه.

```بيثون
استيراد الباندا ك pd
تسجيل الاستيراد

معالج فئة مجلس الشيوخ:
    ديف __init__(النفس، مجلس الشيوخ):
        self.senate = مجلس الشيوخ

    تعريف Process_data (الذات، ملف السجل):
        يحاول:
            # TODO: قم بتنفيذ الكود المفقود هنا
            
        باستثناء الاستثناء:
            تسجيل الدخول.الاستثناء("الفشل العالمي")
        أخيراً:
            df = pd.DataFrame(self.senate)
            df.to_csv("senate.csv")
            تسجيل الدخول.info("تم خروج البرنامج")

#استخدام العينة
مجلس الشيوخ = [{'name': 'John', 'party': 'A'}, {'name': 'Jane', 'party': 'B'}]
المعالج = معالج مجلس الشيوخ (مجلس الشيوخ)
Processor.process_data("logfile.log")
```
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}