পাইথনের আচারের জন্য সাধারণ ব্যবহার cases


134

আমি আচারের ডকুমেন্টেশন দেখেছি, তবে কোথায় আচার দরকারী তা বুঝতে পারছি না।

আচারের জন্য কয়েকটি সাধারণ ব্যবহারের কী কী?


2
আমি যে অংশটি পিকিংয়ের বিষয়ে পাই না তা হ'ল আপনি কেবল একটি ফাইলের মান কেন সংরক্ষণ করবেন না? কেন আচার?
whackamadoodle3000

উত্তর:


59

কিছু ব্যবহার যা আমি জুড়ে এসেছি:

1) কোনও প্রোগ্রামের স্টেটের ডেটা ডিস্কে সংরক্ষণ করা যাতে এটি চালু করতে পারে যেখানে পুনরায় চালু করার সময় এটি ছেড়ে গিয়েছিল (অধ্যবসায়)

২) একটি বহু-কোর বা বিতরণ সিস্টেমে টিসিপি সংযোগে পাইথন ডেটা প্রেরণ (মার্শালিং)

3) একটি ডেটাবেজে পাইথন অবজেক্টগুলি সঞ্চয় করা

৪) একটি অযৌক্তিক পাইথন বস্তুকে স্ট্রিংয়ে রূপান্তর করা যাতে এটি অভিধানের কী হিসাবে ব্যবহার করা যায় (যেমন ক্যাচিং এবং স্মৃতিচারণের জন্য)।

সর্বশেষ একটির সাথে কিছু সমস্যা রয়েছে - দুটি অভিন্ন জিনিসকে পিকেল করা যায় এবং বিভিন্ন স্ট্রিংয়ের ফলস্বরূপ হতে পারে - বা এমনকি একই জিনিসটি দু'বার বাছাই করা বিভিন্ন উপস্থাপনা করতে পারে। এটি কারণ আচার রেফারেন্স গণনা তথ্য অন্তর্ভুক্ত করতে পারে।

@ লুনারিওরনের মন্তব্যে জোর দেওয়ার জন্য - আপনার কোনও অবিশ্বস্ত উত্স থেকে কোনও স্ট্রিং আনপিক করা উচিত নয়, যেহেতু সাবধানে তৈরি করা আচার আপনার সিস্টেমে স্বেচ্ছাসেবক কোড কার্যকর করতে পারে। উদাহরণস্বরূপ https://blog.nelhage.com/2011/03/exploiting-pickle/ দেখুন


27
কাউকে নেটওয়ার্ক বা অন্যান্য অবিশ্বস্ত চ্যানেলের মাধ্যমে আচারযুক্ত বস্তু স্থানান্তর করা উচিত নয়, যদি না পিকযুক্ত ডেটা সাবধানতার সাথে হেরফেরের বিরুদ্ধে সুরক্ষিত করা হয়। আচার ডকুমেন্টেশন সুস্পষ্টভাবে সতর্ক করে দেয় অবিশ্বস্ত বা অমান্যিক উত্স থেকে কখনই ডেটা পিকেল না করে।
চন্দ্রালম্বি

4
@ লুনারিওর্ন: ভালো কথা। আপনি যদি মেশিনগুলির মধ্যে আচারযুক্ত ডেটা স্থানান্তর করতে যাচ্ছেন তবে নিরাপদ চ্যানেল যেমন এসএসএল বা এসএসএইচ টানেলিং ব্যবহার করুন।
ডেভ কির্বি

3
তারপরে আপনি এখনও প্রান্তের উপর নির্ভর করে আপনাকে শোষণ না করার জন্য শেষ পয়েন্টটিতে বিশ্বাস করছেন।
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

@ লুনারিওর্ন - ভাল পয়েন্ট তবে সেই ক্ষেত্রে আমরা কীভাবে পাবলিক ডোমেনে ডেটা এনক্রিপ্ট করতে পারি। আমাদের কি অন্য কোনও পাই
লাইব

পয়েন্ট 4) সত্য? আমি এটি পেয়েছি যার কিছু (পুরানো) প্রমাণ রয়েছে যা এখানে কাজ করবে না ।
সালোটজ

10

ন্যূনতম রাউন্ডট্রিপ উদাহরণ ..

>>> import pickle
>>> a = Anon()
>>> a.foo = 'bar'
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
'bar'

সম্পাদনা: কিন্তু pickling বাস্তব-জগতের উদাহরণ প্রশ্ন, সম্ভবত হিসাবে জন্য pickling সব থেকে উন্নত ব্যবহার (আপনি উৎস মধ্যে বেশ গভীর খোঁড়াখুঁড়ি করতে হবে চাই) ZODB হল: http://svn.zope.org/

অন্যথায়, পিপিআইআই বেশ কয়েকটি উল্লেখ করেছে: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search

নেটওয়ার্ক ট্রান্সফার প্রোটোকলটি ব্যবহারের সহজ হিসাবে নেটওয়ার্কে আচারযুক্ত বস্তু প্রেরণ করার বেশ কয়েকটি উদাহরণ আমি ব্যক্তিগতভাবে দেখেছি।


8

বিতরণ এবং সমান্তরাল কম্পিউটিংয়ের জন্য পিক্লিং একেবারে প্রয়োজনীয়।

বলুন যে আপনি সমান্তরাল মানচিত্রটি কমাতে চেয়েছিলেন multiprocessing(বা পাইনা দিয়ে ক্লাস্টার নোড জুড়ে ), তারপরে আপনাকে নিশ্চিত করতে হবে যে সমান্তরাল সংস্থানগুলি জুড়ে ম্যাপ করার জন্য আপনি যে ক্রিয়াকলাপটি করতে চান তা আচার হবে। যদি এটি আচার না করে থাকে তবে আপনি এটি অন্য প্রক্রিয়া, কম্পিউটার ইত্যাদির অন্যান্য উত্সগুলিতে প্রেরণ করতে পারবেন না এবং একটি ভাল উদাহরণের জন্য এখানে দেখুন ।

এটি করার জন্য, আমি ডিল ব্যবহার করি , যা পাইথনের প্রায় কোনও কিছুই সিরিয়ালাইজ করতে পারে। আপনার কোডটি ব্যর্থ হয়ে যাওয়ার পরে আপনার পিকিংয়ে কী কী ব্যর্থ হচ্ছে তা বুঝতে আপনাকে সাহায্য করার জন্য ডিলেরও কিছু ভাল সরঞ্জাম রয়েছে ।

এবং, হ্যাঁ, লোকেরা গণনার অবস্থা বা আপনার আইপথন সেশন বা যা-ই হোক না কেন বাঁচাতে পিকিং ব্যবহার করে ।


7

আমি এটি আমার একটি প্রকল্পে ব্যবহার করেছি। যদি অ্যাপ্লিকেশনটি কাজ করার সময় বন্ধ হয়ে যায় (এটি একটি দীর্ঘ কাজ করেছে এবং প্রচুর ডেটা প্রক্রিয়া করেছে), আমার পুরো ডেটা কাঠামোটি সংরক্ষণ করতে হবে এবং অ্যাপটি আবার চালানোর পরে এটি পুনরায় লোড করা দরকার। আমি এটির জন্য সিপিকেল ব্যবহার করেছি, কারণ গতি একটি গুরুত্বপূর্ণ বিষয় এবং ডেটার আকার সত্যিই বড়।


4

আপনার ডেটা স্ট্রাকচার এবং ক্লাসের জন্য পিকল "সেভ অ্যাস .." এবং "ওপেন .." এর মতো। ধরা যাক আমি আমার ডেটা স্ট্রাকচারগুলি সংরক্ষণ করতে চাই যাতে এটি প্রোগ্রামের সঞ্চালনের মধ্যে স্থির থাকে।

সংরক্ষণ করা হচ্ছে:

with open("save.p", "wb") as f:    
    pickle.dump(myStuff, f)        

লোড হচ্ছে:

try:
    with open("save.p", "rb") as f:
        myStuff = pickle.load(f)
except:
    myStuff = defaultdict(dict)

এখন আর আমার আবার স্ক্র্যাচ থেকে আমার স্টাফ তৈরি করতে হবে না এবং আমি যেখান থেকে চলে এসেছি সেখান থেকে আমি (লে) নিতে পারি।


3

নবজাতকের জন্য (যেমনটি আমার ক্ষেত্রে রয়েছে) সরকারী ডকুমেন্টেশন পড়ার সময় কেন প্রথমে আচার ব্যবহার করবেন তা বোঝা সত্যিই কঠিন । এটি ডক্স দ্বারা বোঝানো হয়েছে যে আপনি ইতিমধ্যে সিরিয়ালাইজেশনের পুরো উদ্দেশ্যটি জানেন। সিরিয়ালাইজেশনের সাধারণ বিবরণ পড়ার পরে কেবল আমি এই মডিউল এবং এর সাধারণ ব্যবহারের ক্ষেত্রে বুঝতে পারি understood নির্দিষ্ট প্রোগ্রামিং ভাষার উপেক্ষা না করে সিরিয়ালকরণের বিস্তৃত ব্যাখ্যাগুলি সহায়তা করতে পারে: https://stackoverflow.com/a/14482962/4383472 , সিরিয়ালাইজেশন কী? , https://stackoverflow.com/a/3984483/4383472


আপনার "উত্তর" একটি উত্তর নয়, এটি আরও একটি মন্তব্য। ওপির প্রশ্নটি হল "আচারের জন্য কিছু সাধারণ ব্যবহারের ক্ষেত্রে কী কী?" আপনি কি মনে করেন যে আপনি কোনওভাবেই এই প্রশ্নের উত্তর দিয়েছেন?
মাইক ম্যাকার্নস

3
ভাল, আমি অনুভব করি যে আমি প্রশ্নের উত্তর দিয়েছি কারণ আমি এখানে , এখানে এবং এখানে এই মডিউলটি পড়ার চেষ্টা করার সময় আচারের সাধারণ ব্যবহারগুলি বুঝতে আমার অসুবিধা হয়েছিল । কারণ বেশিরভাগ ক্ষেত্রে তারা সিরিয়ালাইজেশনের পুরো ধারণার পিছনে অনুপ্রেরণা জেনে ধরেছে যে আচার কী করে তা ব্যাখ্যা করতে শুরু করে। সিরিয়ালাইজেশনে সহজ উইকি নিবন্ধটি পড়ার পরে আমি সাধারণ ধারণাটি পাশাপাশি "সাধারণ ক্ষেত্রে" উপলব্ধি করি। হতে পারে এটি কাউকে সাহায্য করবে ...
খারাপ

এবং এই সাধারণ ক্ষেত্রে কিছু ...? যদি এমন কিছু কিছু থাকে যা অন্য উত্তরে এখানে তালিকাবদ্ধ নেই ... আপনার উত্তরে সেগুলি যুক্ত করা খুব উপযুক্ত হবে।
মাইক ম্যাকার্নস

2

একটি বাস্তব-বিশ্বের উদাহরণ যুক্ত করার জন্য: পাইথনের স্পিনস ডকুমেন্টেশন সরঞ্জামটি পার্সড ডকুমেন্টগুলি এবং নথিগুলির মধ্যে ক্রস-রেফারেন্সগুলি ক্যাশে করতে আচার ব্যবহার করে, ডকুমেন্টেশনের পরবর্তী বিল্ডগুলিকে গতিময় করে তোলে।


1

আমি এটির জন্য যেগুলি ব্যবহার করি সেগুলি আপনাকে বলতে পারি এবং এর জন্য এটি ব্যবহার করা দেখেছি:

  • গেম প্রোফাইল সংরক্ষণ করে
  • গেমের ডেটা জীবন ও স্বাস্থ্যের মতো সঞ্চয় করে
  • সংখ্যার পূর্ববর্তী রেকর্ডগুলি কোনও প্রোগ্রামে অন্তর্ভুক্ত

এগুলি হ'ল আমি এটি কমপক্ষে ব্যবহার করি


1

আমি ওয়েব ওয়েবসাইট স্ক্র্যাপিংয়ের সময় পিকলিং ব্যবহার করি সেই সময়ে আমি 8000 কেও বেশি ইউআরএল সংরক্ষণ করতে চাই এবং এগুলি যত তাড়াতাড়ি সম্ভব প্রক্রিয়া করতে চাই তাই আমি পিক্লিং ব্যবহার করি কারণ এর আউটপুট গুণমান খুব বেশি।

আপনি সহজেই ইউআরএলে পৌঁছে যেতে পারেন এবং যেখানে চাকরি ডিরেক্টরি কী শব্দটি প্রক্রিয়াটি পুনরায় শুরু করার জন্য খুব দ্রুত ইউআরএল বিশদ আনতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.